对于这些搞笑段子来说,正常的爬取手段已经不能够顺利的抓取到了,所以我们经过分析之后,对爬取的界面加了一个请求头部和浏览器伪装
接下来就使用昨天提到了lxml包进行html树状化来进行作者,好笑数,文章内容,评论数,这四种的数据提取
我们首先分析一下需要爬取的内容的树状结构
分析之后,共同点都是这个id的之前的值相同,后边的数字不一样
所以我们使用contains方法,将含有这个id = 'qiushi_tag_’全部提取取出来
扫描二维码关注公众号,回复:
6214494 查看本文章
接下来根据结构来将我们需要的数据提取出来
在上面的截图中可以找到对应节点的值
接下来直接上代码
import requests
from lxml import etree
from datamanager import DataManager
#判空
def getDataFromList(temp_list):
if len(temp_list) > 0:
return temp_list[0]
else:
return
#数据库管理对象
dm = DataManager()
#接口
base_url= 'https://www.qiushibaike.com/hot/page/%d/'
#网络接口:
for page in range(1,2,1):
url = base_url%(page)
print(url)
headers = {
'User-Agent': 'Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.26Safari/537.36Core/1.63.6824.400QQBrowser/10.3.3127.400'
}
response = requests.get(url,headers = headers)
with open("qiushi.html",'w',encoding=response.encoding) as fp:
fp.write(response.text)
#数据提取
tree = etree.HTML(response.text)
#先定位到文章列表
dz_list = tree.xpath('//div[contains(@id,"qiushi_tag_")]')
print(dz_list)
for dz in dz_list:
#zuozhe
author_list = dz.xpath('./div/a/h2/text()')
# print(len(author_list))
author = getDataFromList(author_list).strip()
print(author)
#haoxiaoshu
funny_num_list = dz.xpath('.//i[@class="number"]/text()')
funny_num = getDataFromList(funny_num_list).strip()
print(funny_num)
#
#duanzi content
content_list = dz.xpath('.//div[@class="content"]/span/text()')
content = getDataFromList(content_list).strip()
print(content)
#pinglun
#
stats_list_num = dz.xpath('.//span[@class="stats-comments"]/a/i[@class="number"]/text()')
stats_num =getDataFromList(stats_list_num)
print(stats_num)
# #neirong
# content_list_p = dz.xpath('.//div[@class="main-text"]/text()')
# content_p = getDataFromList(content_list_p)
# print(content_p)
# print('--------')
#数据存储
data = (author,funny_num,stats_num,content)#(作者,好笑数,评论数,评论内容)
dm.save_data(data) #保存数据
本次好要将抓取到的数据存到数据库中 可以省略 ,在下一篇中在做说明