使用lxml解析爬取内容

2019-05-27 10:51:54阅读 81评论 0

前言

除了bs4以外,还有一个非常好用的解析工具lxml,相对来说有以下优点:

1.在谷歌浏览器安装lxml插件后,打开目标网站,进行可视化爬取规则调试

2.语法简单易读

实现

```python
from lxml import etree
from urllib import request
import time

class duanzispider(object):  
    def __init__(self,start,end):  
        self.start=start  
        self.end=end  
        pass  
    def run(self):  
        print('准备开始爬取')  
        reqs=self.make_request()  
        datas=[]  
        num=1  
        for req in reqs:  
            print('开始爬取第%d页'%num)  
            res=request.urlopen(req).read()  
            list=self.parse(res)  
            datas+=list  
            print('第%d页爬取完成'%num)  
            num+=1  
        print(datas)  


    def make_request(self):  
        headers={  
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3676.400 QQBrowser/10.4.3505.400'  
        }  
        urls='http://www.xxhh.com/duanzi/page/%d/?l=1558863600'  
        reqs=[]  
        for i in range(self.start,self.end+1):  
            url=urls%(i)  
            req=request.Request(headers=headers,url=url)  
            reqs.append(req)  
        return reqs  
    def parse(self,res):  
        tree=etree.HTML(res)  
        users=tree.xpath("//div[@class='section']//div[@class='user-info-username']//text()")  
        contents=tree.xpath("//div[@class='section']//div[@class='article']//text()")  
        list=[]  
        for i in range(len(users)):  
            data={}  
            data['user']=users[i]  
            data['content']=contents[i]  
            list.append(data)  
        return list  

if __name__=='__main__':  
    print('请输入爬取的页面编号')  
    start=int(input('从?页开始:'))  
    end=int(input('从?页结束:'))  
    duanzi=duanzispider(start,end)  
    duanzi.run()
执行结果:
开始爬取第3页  
第3页爬取完成  
开始爬取第4页  
第4页爬取完成  
开始爬取第5页  
第5页爬取完成  
[{'user': '春娇与志明', 'content': '以前爷爷家养了一只狗,怕它偷吃东西,就在一些食物上涂了辣椒,到后来这家伙无辣不欢。。连狗粮都要拌上辣椒。。。'}, {'user': '柠檬不萌', 'content': '老妈吃完饭跟我聊天说:“我和你妈同时掉河里你先救谁?”\r\n“妈,该吃药了。”'}, {'user': '梦想不只是梦与想', 'content': '昨晚吃饺子,刚端上来,老婆就一个,猛吹几下立刻吃起来。\r\n我就说她:“慢点吃,那么热不怕烫啊?!”\r\n老婆回答说:“吹呀吹呀我吃饺不害怕~”'}……]  

Process finished with exit code 0

```

还没有评论,来说两句吧