使用lxml解析爬取内容
前言
除了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
```
还没有评论,来说两句吧
