一.创建项目
命令行切换到对应的文件夹下
执行命令scrapy startproject qidian_hot
qidian_hot是指项目名
执行完成后文件夹下会创建名为qidian_hot的文件夹
二.用pyCharm打开项目
注意打开的目录,别打开了下一级的qidian_hot目录
三.确定需求(爬取的目标)
网页地址:https://www.qidian.com/rank/hotsales?style=1&page=1
这三个div对应内容里的具体信息
四.编写爬虫
1.在spiders文件夹下创建qidian_hot_spider.py文件
spiders文件夹是用来存放用于解析页面数据的程序文件
2.导入Request模块,和Spider基类
Request模块:根据目标网站的地址生成请求
3.定义爬虫名称和起始的URL列表
4.编写数据解析函数
(1).使用xpath定位到小说内容的div元素
下图为定位目标
定位位置为class为book-mid-info的div
(2).读取每部小说的详细信息,并逐条返回
图1是主要代码,图2是div元素内对应的节点内容
5.执行爬虫程序
切换到qidian_hot文件夹下执行命令:
scrapy crawl hot或scrapy crawl hot -o hot.csv
hot是代码指定的name值(爬虫名称),-o hot.csv是把结果写到当前文件夹下的hot.csv文件(文件会自动创建,文件名可以随便起)
结果
整体代码
from scrapy import Request
from scrapy.spiders import Spider
class HotSalesSpider(Spider):
# 爬虫名称
name = "hot"
#起始URL列表
start_urls = ["https://www.qidian.com/rank/hotsales?style=1&page=1"]
#数据解析,此时response对象已经有网页的html数据
def parse(self, response):
#使用xpath定位到小说内容的div元素
list_selector = response.xpath("//div[@class='book-mid-info']")
#读取每部小说的元素
for one_selector in list_selector:
#获取小说名称
name = one_selector.xpath("h4/a/text()").extract()[0]
#获取作者,第一个p标签的第一个a标签的内容
author = one_selector.xpath("p[1]/a[1]/text()").extract()[0]
#获取类型
type = one_selector.xpath("p[1]/a[2]/text()").extract()[0]
#获取形式
form = one_selector.xpath("p[1]/span/text()").extract()[0]
#把爬取的数据保存到字典
hot_dict = {
"name" : name,
"author" : author,
"type" : type,
"form" : form
}
yield hot_dict