定向爬虫(2)———xpath爬取 疯狂中文网 小说总榜

定向爬虫实现起来比较简单,也比较容易理解
难搞的是Xpath语句我觉得写的明明是对的,然后返回结果为空,一直谷歌,一直找原因,最后妥协了,还是copy比较好用(手动狗头)。
直接上代码吧,也没有什么特别的东西,大多东西都写在注释里了

import requests
import lxml.etree # 最终选用etree
import 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('//*[@id="CrListText"]')
    # 因为抓取出来是list[],且只有一个元素,急用索引提取出来
    content_file = content_file[0]
    book_list = []
    book_cate = content_file.xpath('//ul/li[@class="li2"]/a/text()')
    book_name = content_file.xpath('//ul/li[@class="li3"]/a/font/text()')
    book_time = content_file.xpath('//ul/li[@class="li5"]/text()')
    book_time.pop(0) # 因为多爬了头标识,用pop方法删去
    book_write = content_file.xpath('//ul/li[@class="li6"]/a/text()')
    book_num = content_file.xpath('//ul/li[@class="li8"]/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_list


def 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‘

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我来介绍一下如何使用 PythonXPath 爬取评书网的数据。 首先,我们需要安装 requests 和 lxml 库。可以使用以下命令进行安装: ``` pip install requests lxml ``` 接下来,我们需要使用 requests 库发送请求并获取评书网的 HTML 页面。我们可以使用以下代码: ```python import requests url = 'http://www.pingshu8.com/' response = requests.get(url) if response.status_code == 200: html = response.text print(html) else: print('请求失败') ``` 接下来,我们需要使用 lxml 库来解析 HTML 页面。我们可以使用以下代码: ```python from lxml import etree html = '<html><body><div><h1>hello world</h1></div></body></html>' selector = etree.HTML(html) result = selector.xpath('//h1/text()') print(result) ``` 上面的代码中,我们首先使用 etree.HTML() 函数将 HTML 页面转换为 Element 对象,然后使用 xpath() 方法获取我们想要的数据。 接下来,我们需要找到评书网页面中我们需要爬取的数据的 XPath 路径。你可以使用 Chrome 浏览器的开发者工具来查找 XPath 路径。具体步骤是: 1. 打开评书网页面 2. 右键点击需要爬取的数据区域 3. 选择“检查”,打开开发者工具 4. 在开发者工具中找到相应的 HTML 元素 5. 右键点击该元素,选择“Copy XPath”即可复制该元素的 XPath 路径 例如,我们想要爬取评书网首页的所有分类名称和链接,我们可以使用以下代码: ```python import requests from lxml import etree url = 'http://www.pingshu8.com/' response = requests.get(url) if response.status_code == 200: html = response.text selector = etree.HTML(html) # 获取所有分类名称和链接 categories = selector.xpath('//div[@id="nav"]/ul/li/a/text()') links = selector.xpath('//div[@id="nav"]/ul/li/a/@href') for i in range(len(categories)): print(categories[i], links[i]) else: print('请求失败') ``` 上面的代码中,我们使用了 XPath 路径 `//div[@id="nav"]/ul/li/a/text()` 和 `//div[@id="nav"]/ul/li/a/@href` 来获取所有分类名称和链接。 希望这个示例能够帮助你学习如何使用 XPath 爬取评书网的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值