开发者

一文学会利用python解决文章付费限制问题

目录
  • 本次爬虫思路
  • 本次操练网页
  • ✨一.爬虫模板
    • 1.urllib库的使用模板
    • 2.requests库的使用模板
  • ✨二.分析信息接口
    • ✨三.通过请求拿到响应
      • ✨四. 提取信息
        • 1.正则表达式
        • 2.XPath
        • 3.漂亮的汤(BeautifulSoup)<本次不使用>
      • ✨五.保存内容
        • ✨六.总结(附完整代码)
          • 完整代码

        本次爬虫思路

        最最重要的是分析信息接口!!!

        1. 获取url

        2. 通过请求拿到响应

        3. 处理反爬

        4. 提取信息

        5. 保存内容

        本次操练网页

        hphpttps://www.duanmeiwen.com/xinshang/3203373.html(某美文网)

        网页内容:

        一文学会利用python解决文章付费限制问题

        一文学会利用python解决文章付费限制问题

        ✨一.爬虫模板

        1.urllib库的使用模板

        import urllib.request     
        url ='xxxxxxxxxxxx'   
        #发送请求                
         request= urllib.request.Request(url,data,header)      
         #得到响应
         response=urllib.request.urlopen(request)
         #解码
         content = response.read().decode() 
         #查看数据
         print(content)    
        

        2.requests库的使用模板

        import requests   
        url ='xxxxxxxxxxxx' 
        #发送请求                              
        response = request.get(url, params,headers)  (get请求或者post请求)  
        #根据响应的格式解码,非常智能
        response.encoding=response.appareent_encoding
         #查看数据
         print(response.txt)
        

        ✨二.分析信息接口

        1.首先右键查看网页源代码

        一文学会利用python解决文章付费限制问题

        很明显,爬取的信息就在源代码里,所以直接对网页链接发起请求。这里请求头伪装我们优先携带user-agent

        ✨三.通过请求拿到响应

        import requests
        
        # 需要请求的url
        url = 'https://www.duanmeiwen.com/xinshang/3203373.html'
        
        # 伪装请求头
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        }
        
        # 获得响应
        response = requests.get(url=url, headers=headers)
        
        # 智能解码
        response.encoding = response.apparent_encoding
        # 打印数据
        print(response.text)
        

        一文学会利用python解决文章付费限制问题

        ✨四. 提取信息

        针对返回数据的特点,我们现在有三种方法:

        1.正则表达式

        正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,android这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。简单来说,利用一定的逻辑公式,过滤掉不需要的数据,主要处理字符串。对于本题来说有点杀鸡用牛刀了。简单来示范一下:

        首先导入re模块

        import re
        

        接下来开始操作这堆"字符串"

        re.compile()是用来优化正则的,它将正则表达式转化为对象,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式,多次调用一个正则表达式就重复利用这个正则对象,可以实现更有效率的匹配。需要搭配finditer()等一起使用,参数pattern : 正则表达式;,flags : 表示匹配模式。

        一文学会利用python解决文章付费限制问题

        右键点击检查进入Network页面,主要是方便我们看清楚结构。

        一文学会利用python解决文章付费限制问题

        效果

        一文学会利用python解决文章付费限制问题

        这里写的比较粗糙,因为大家会发现我们会大量在重复写一个相同的筛选语句,所以就有那么一点机械重复的感觉,而且我们有专门对付这中HTML结构的javascript工具,所以接下来咱们隆重介绍XPath!

        2.XPath

        XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快地被开发者采用来当作小型查询语言。我们只要简单理解为它主要是针对定位HTML中某部分位置的语言。

        首先导入XPath

        from lxml import e开发者_Js入门tree
        

        接下来开始操作

        一文学会利用python解决文章付费限制问题

        效果

        一文学会利用python解决文章付费限制问题

        这就是优雅,对比上面,我们用三行代码就完成了任务,由此可见,用对方法很重要。

        3.漂亮的汤(BeautifulSoup)<本次不使用>

        ✨五.保存内容

        这里就很简单,基础文件操作的知识,“行百里者半九十”,来吧,咱们直接一口气写完。

        tree = etree.HTML(response.text)
        titles = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/h2/text()')
        message = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/p/text()')
        for i in range(len(message)):
            with http://www.devze.comopen('优美文艺句子.txt', 'a', encoding='utf-8') as fp:
                fp.write(message[i])
                fp.write('\n')
        print('文章爬取完成')
        

        效果

        一文学会利用python解决文章付费限制问题

        ✨六.总结(附完整代码)

        过今天的小案例,我们明白了,第一,思路一定要清楚,快准狠分析出接口链接,第二,提取数据的方法要正确,这样会直接事半功倍,好了,今天就分享到这里,谢谢大家的观看,有什么想法记得评论区告诉我!拜拜~✨ ✨ ✨

        完整代码

        import requests
        from lxml import etree
        
        # 需要请求的url
        url = 'https://www.duanmeiwen.com/xinshang/3203373.html'
        
        # 伪装请求头
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
        }
        
        # 获得响应
        response = requests.get(url=url, headers=headers)
        
        # 智能解码
        response.encoding = response.apparent_encoding
        
        # 提取数据
        tree = etree.HTML(response.text)
        titles = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/h2/text()')
        message = tree.xpath('/html/body/div[2]/div[2]/div/div[2]/p/text()')
        
        #遍历保存数据
        for i in range(len(message)):
            www.devze.comwith open('优美文艺句子.txt', 'a', encoding='utf-8') as fp:
                fp.write(message[i])
                fp.write('\n')
        print('文章爬取完成')
        

        以上就是一文学会利用python解决文章付费限制问题的详细内容,更多关于Python解决文章付费限制的资料请关注我们其它相关文章!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜