因为是初学python
,所以遇到了一些问题,但好在一一解决,特此记录一边温故知新。
问题如下:
- 数据解析方式:可选择的方式有很多,对于选择困难的人员来说是一件比较头疼的事情。层层对比之下最终选择了xpath(仁者见仁,不强求),因为xpath解析是我们在爬虫中最常用也是最通用的一种数据解析方式,由于其高效且简介的解析方式受到了广大程序员的喜爱。
- 中文乱码处理:获取到的结果是乱码,很头疼,百度了很多方法,不怎么管用,最终请教了老司机,老司机会用不会讲,惆怅! 留着以后攻坚吧~
- 字符串中间多个空格问题:获取到的标题中间的空格数量不等,2、3、4个都有,这个不统一我是受不了,但是看了一下python关于字符串的文档,没有找到解决办法。最终还是度娘给了答案:正则。
import requests
import re
from lxml import etree
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
data = []
url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="book-mulu"]/ul/li')
for li in li_list:
title=li.xpath('.//a/text()')[0].encode('ISO-8859-1').decode('utf-8')# 中文乱码处理
title_url = li.xpath('.//a/@href')[0].encode('ISO-8859-1').decode('utf-8')
dic = {
"title": re.sub('s+', ' ',title),# 将有多个空格的地方替换为只有一个空格
"title_url": 'https://www.shicimingju.com/'+title_url
}
data.append(dic)
print(data)
最终数据:
谢谢观看~