Python Scrapy 爬取起点中文网小说榜单完整攻略
1. 爬取起点中文网小说榜单的网址
首先,我们需要知道起点中文网小说榜单的网址。通过分析起点中文网小说榜单页面,我们可以得知榜单的网址为:https://www.qidian.com/rank/yuepiao。
2. 安装Scrapy
Scrapy是一个Python的爬虫框架,我们需要先安装它。
pip install scrapy
3. 创建Scrapy项目
通过命令scapy startproject [项目名]
创建Scrapy项目。
scrapy startproject qidian
4. 创建Spider
在Scrapy项目中,我们需要创建一个Spider来定义如何爬取网站并解析爬取的数据。在本例子中,创建一个名为qidian_spider.py
的文件。
import scrapy
class QidianSpider(scrapy.Spider):
name = "qidian"
start_urls = ["https://www.qidian.com/rank/yuepiao"]
def parse(self, response):
pass
在Spider中,我们定义了爬虫的名称name
、起始网址start_urls
和解析爬取数据的函数parse
。在初始的parse
函数中,我们先不做任何操作,将其留空即可。
5. 提取信息
在Spider中,我们需要编写代码来提取我们需要的信息。在本例中,我们需要提取小说的标题、作者、类型、状态和简介。
def parse(self, response):
for book in response.css("#rank-view-list > div > ul > li"):
yield {
"title": book.css("div.book-mid-info h4 a::text").get(),
"author": book.css("div.book-mid-info p.author a.name::text").get(),
"type": book.css("div.book-mid-info p.author a:nth-child(2)::text").get(),
"status": book.css("div.book-mid-info p.author span::text").get(),
"intro": book.css("div.book-mid-info > p.intro::text").get()
}
我们使用Scrapy提供的CSS Selector来提取信息。我们通过迭代每个小说的列表项,并通过CSS Selector选择器定位到需要提取的数据。
6. 运行Scrapy项目
在Spider编写完成后,我们还需要使用以下命令才能启动Scrapy项目。
cd qidian
scrapy crawl qidian -o books.json
Scrapy将会爬取起点中文网小说榜单,同时将结果保存在当前目录下的books.json
文件中。
示例说明
示例1:
以下是提取小说排名、书名、作者、类型和简介内容:
yield {
"rank": book.css("span.rank-tag::text").get(),
"title": book.css("div.book-mid-info h4 a::text").get(),
"author": book.css("div.book-mid-info p.author a.name::text").get(),
"type": book.css("div.book-mid-info p.author a:nth-child(2)::text").get(),
"intro": book.css("div.book-mid-info > p.intro::text").get()
}
示例2:
以下是提取小说的收藏数、总点击数和月票数:
def parse(self, response):
for book in response.css("#rank-view-list > div > ul > li"):
yield {
"title": book.css("div.book-mid-info h4 a::text").get(),
"collection": book.css("div.book-mid-info div.total-count::text")[0].get(),
"click_count": book.css("div.book-mid-info div.total-count::text")[1].get(),
"monthly_ticket": book.css("div.book-right-info div.monthly-ticket span.num::text").get(),
}
在CSS Selector中,我们可以使用[]
运算符来选择同一个标签下多个属性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python scrapy爬取起点中文网小说榜单 - Python技术站