当前位置:网站首页 > 更多 > 编程开发 > 正文

[Python] Week5 情话网小爬虫

作者:CC下载站 日期:2020-12-19 00:00:00 浏览:77 分类:编程开发

太久没写爬虫了,手生到连xpath怎么提取出来都忘记了,requests取回的数据编码都忘记怎么转换了

于是乎在百度上随便搜了一个情话网,来进行爬取。

目标地址:https://www.qinghuawang.net/

一如既往的习惯,打开网站后F12,看是不是ajax请求

也是,看着就很老的一个网站怎么会用ajax呢,想多了。

于是就用原始的Xpath咯。

打开浏览器里面的xpath helper

按住shift键,去选择文章标题

这样就获取到了一条标题的内容,然后就是稍微修改修改xpath,从原始的

/html/body[@class='listBody']/div[@class='bodyMain']/div[@class='bodyMainBody']/div[@class='infoList']/ul[@class='infoListUL mt5']/li[1]/a[@class='articleTitle fl']

修改一下

//li/a[@class='articleTitle fl']

就可以取到所有的标题了。

但是这样取出来的数据并不是纯文本,他还包含了一些html标签,于是乎在后面加上一个/text()

//li/a[@class='articleTitle fl']/text()

这样就可以获取到一页中的标题了

用python随便写一下试试。

发现取出来之后是乱码,那就肯定是编码问题了,打开F12,查看html中的head,发现是gb2312

提笔忘字之,怎么转换编码来着,百度了一下。

res=requests.get(url).content
res=res.decode("gb2312")

以前怎么写的忘记了,但应该不是这么麻烦的。

然后是这样的

获取了一页的标题后,然后再获取详情页的链接,因为是a标签,[email protected]个属性了

//li/a[@class='articleTitle fl'][email protected]

还得进入里面去获取文章内容咯,于是随便点进去看一下,

详情页地址:https://www.qinghuawang.net/a/1808.html

xpath发现,都是包含在p标签内

于是只要把/p后面的[1]去掉就可以获取到所有的段落咯,再加上一个text()就可以获取到文本了。

然后放到python里面试一下。

然后又报错了,大概意思是gb2312无法解析0xfd

于是百度了一下,

解决之后。

然后就是将这些话保存至txt咯。

最后加几个For循环去爬取所有的内容咯

最后整理代码如下,没进行清洗了,就开了个多线程:

#-*-coding:utf-8-*-
"""
-------------------------------------------------
@Author:Lan
@Blog:www.lanol.cn
@Date:2020/12/19
@Description:I'minchargeofmyCode
-------------------------------------------------
"""
importparsel
importrequests
importthreading


defgetContet(urls):
foriinurls:
url='https://www.qinghuawang.net/'+i
res=requests.get(url).content
res=res.decode("gb2312",errors='ignore')
xpath=parsel.Selector(res)
content=xpath.xpath("//p/text()").extract()
withopen('sentence.txt','a+',encoding='utf8')asf:
forjincontent:
f.write(j+"
")
print(j)


defgetAll():
foriinrange(1,20):
url=f'https://www.qinghuawang.net/qinghua/list_1_{i}.html'
res=requests.get(url).content
xpath=parsel.Selector(res.decode('gb2312'))
urlList=xpath.xpath("//li/a[@class='articleTitlefl'][email protected]").extract()
threading.Thread(target=getContet,args=(urlList,)).start()


if__name__=='__main__':
getAll()

废了,废了

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯