基于Scrapy构架的爬虫之问题一:我的第一个代码

“难过难过 ,难着难着就过去了”

作为一个爬虫初学者来说,这是我第一个能看懂,并且困扰我三四天的代码。

我的爬虫时基于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']")代码重新敲了一遍,终于过了!!!

因为提示错误中说我的路径语句不合法,我一直没注意到,据我分析,应该是“//”用中文打出来的所以才导致一直爬不出来。

第一次学爬虫,有什么不足之处还望各位大神多多指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值