“难过难过 ,难着难着就过去了”
作为一个爬虫初学者来说,这是我第一个能看懂,并且困扰我三四天的代码。
我的爬虫时基于Scrapy构架的,爬取24小时热销榜小说的代码,需要爬取到的信息包括小说名称、作者、类型、形式(连载或者完结)并将其保存到CSV文件中,因为这个爬虫简单,只涉及到了HotSalesSpider类,其所有功能都在其上实现;除此之外还用到了parse()函数,下面进行依次介绍:
(1)HotSalesSpider类:其基类为Spider,类中定义了两个属性,name和start_urls,name为爬虫名;start_urls用来存储目标网址列表。
(2)parse()函数是爬虫方法的核心,需要完成两个主要任务:
- 提取页面的数据
- 提取页面的链接,并对页面链接产生下载请求
首先在cmd中建立项目,具体命令为:
>d
>cd d:\Python (注意:Python为项目所在的文件夹)
>scrapy startproject Python (注意第一次使用cmd创建爬虫项目时,项目的名称要与放置项目文件夹的名称相同,必须为英文,下一次就可以任意了。)
项目创建完成后会在所在文件夹产生相应的配置文件,如下图:
之后在Spider文件下创建新的.py代码,具体代码如下:
from scrapy import Request
from scrapy.spiders import Spider
class HotSalesSpider(Spider): #类HotSalesSpider,基于Spider
#定义爬虫名称
name = 'hot'
#起始的URL列表
#qidian_headers = {"User-Agent":Mozilla/"
## "5.0 (Windows NT 10.0;"
# "WOW64) AppleWebKit/"
# "537.36 (KHTML, like Gecko) Chrome/"
# "91.0.4472.164 Safari/"
# "537.36"}
#def start_requests(self):
# ur1 = "https://www.qidian.com/rank/hotsales?style=1"
# yield Request(ur1,headers=self.qidian_headers,callback=self.qidian_parse)
start_urls = ["https://www.qidian.com/rank/hotsales?style=1"]
#解析函数
def parse(self, response): #定义方法parse()解析函数,提取页面数据、链接并对链接页面的下载请求
#使用xpath定位到小说内容的div元素
list_selector = response.xpath("//div[@class='book-mid-info']")
#list_selecter是一个选择器对象列表,存储有多个选择器对象,一个选择器对应一个div元素
#依次读取每部小说的元素,从中获取名称、作者、类型和形式
for one_selector in list_selector:
#获取小说名称
name = one_selector.xpath("h4/a/text()").extract()[0]
#获取作者 ,extract()[0]为提取提取xpath()或css()返回的SelectorList对象中文本数据,返回unicode字符串列表
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} #形式
# print(hot_dict)
#使用yield返回字典
yield hot_dict
要注意!要注意!要注意!
配置setting.py文件
ITEM_PIPELINES = {
#'Python.pipelines.CsvItemExporterPipeline': 1,
'Python.pipelines.PythonPipeline': 300,
}
把项目管道打开,还要具体的一些环境配置,大家可以搜索一下。
完成之后,就是运行项目,其中项目运行有两种方式,具体如下:
(1)在cmd中运行,具体命令如下:
>d:
>cd D:\Pychon\Python
>scrapy crawl hot(爬虫名) -o hot.csv(保存在hot.csv文件里)
(2) 在项目文件下重新创建一个start.py文件,直接在运行环境中执行,代码如下:
# -*- coding: utf-8 -*-
from scrapy import cmdline
#导入cmd命令窗口
cmdline.execute("scrapy crawl hot -o hot.csv" .split())
#运行爬虫并生产csv文件
结果如下:
到代码运行成功为止,我已经被折磨了好多天,下面是在代码运行成功之前报出的错误:
从此,就开启了我的找错之路:
找错一:setting.py的管道配置,上面已经说过了,但是仍然么有解决
找错二:网页分析问题,我也改过,但是还是不行
找错三:运行环境问题,我找了师兄帮我运行,结果!结果他在pycharm中,安装了scrapy库之后运行出来了,那一刻,我喜出望外,手舞足蹈,哈哈大笑。因为我是在Spyder上运行的,于是回去重新安装了anaconda9.7,安装了pycharm,但是但是,还是同样的错误!!!!!!!!
那么我的问题到底出在哪了???
最终错误:!!!!!
直到今天,我又把list_selector = response.xpath("//div[@class='book-mid-info']")代码重新敲了一遍,终于过了!!!
因为提示错误中说我的路径语句不合法,我一直没注意到,据我分析,应该是“//”用中文打出来的所以才导致一直爬不出来。
第一次学爬虫,有什么不足之处还望各位大神多多指正。