定向爬虫(2)———xpath爬取 疯狂中文网 小说总榜
发布时间:2025-12-10 11:35:27
浏览次数:12
定向爬虫实现起来比较简单,也比较容易理解
难搞的是Xpath语句我觉得写的明明是对的,然后返回结果为空,一直谷歌,一直找原因,最后妥协了,还是copy比较好用(手动狗头)。
直接上代码吧,也没有什么特别的东西,大多东西都写在注释里了
import requestsimport lxml.etree # 最终选用etreeimport lxml.html # 因为就返回结果为空,试了两种方法的对象构造import csv# 程序开头先定义网址url = 'http://www.fkzww.com/Book/ShowBookTop.aspx'def req(url):# 获取网页源码,编码html = requests.get(url).content.decode("gbk")# etree.HTML转化为xpath可以识别的对象selector = lxml.etree.HTML(html)# 先抓大在抓小的原则,先把整个信息节点都抓出来content_file = selector.xpath('//*[@]')# 因为抓取出来是list[],且只有一个元素,急用索引提取出来content_file = content_file[0]book_list = []book_cate = content_file.xpath('//ul/li[@]/a/text()')book_name = content_file.xpath('//ul/li[@]/a/font/text()')book_time = content_file.xpath('//ul/li[@]/text()')book_time.pop(0) # 因为多爬了头标识,用pop方法删去book_write = content_file.xpath('//ul/li[@]/a/text()')book_num = content_file.xpath('//ul/li[@]/text()')book_num.pop(0)for i in range(len(book_name)):book_dict = {"作品类型": book_cate[i],"作品名字": book_name[i],"更新时间": book_time[i],"作家": book_write[i],"点击总榜": book_num[i]}book_list.append(book_dict)return book_listdef Write(book_list):# 使用csv写入文件with open("小说排行榜.csv", 'w', encoding='gbk') as f:writer = csv.DictWriter(f, fieldnames=["作品类型", '作品名字', '更新时间', '作家', '点击总榜'])writer.writeheader()writer.writerows(book_list)if __name__ == '__main__':Write(req(url))
最后结果正常,如果windows系统可以用Excel正常打开,如果linux需要改下Write函数下的编码方式,将编码 encoding的值改为’utf-8‘