来自 新万博体育 2018-01-28 22:02 的文章

爬虫会自动爬这个地址,然后结果就在下面的

2.3 新建 Scrapy 爬虫项目
 
Scrapy 是 Python 程序,同时也是一套框架,提供了一系列工具来简化开发,因此我们按照 Scrapy 的模式来开发,先新建一个 Scrapy 项目,如下:
 
scrapy startproject ebook
Scrapy 项目包含一些基础框架代码,我们在此基础上开发,目录结构类似下图:
 
 
 
2.4 新建 Scrapy 爬虫
 
这时,Scrapy 还不知道我们要爬取什么数据,所以我们要用 Scrapy 工具新建一个爬虫,命令如下:
 
scrapy genspider example example.com
下面实操,我们在起点中文网找一篇免费小说的完本,这里选择是《修真小主播》。
 
我们就在前面建立的 Scrapy 项目 ebook 下新建一个爬虫,命令如下:
 
cd ebook
scrapy genspider xzxzb qidian.com
执行成功之后,在项目的 spider 目录下就多了一个 xzxzb.py 的文件。
 
2.5 爬虫思路
 
怎么抓取数据,首先我们要看从哪里取,打开《修真小主播》的页面,如下:
 
 
 
有个目录页签,点击这个页签可以看见目录,使用浏览器的元素查看工具,我们可以定位到目录和每一章节的相关信息,根据这些信息我们就可以爬取到具体的页面:
 
 
 
2.6 获取章节地址
 
现在我们打开 xzxzb.py 文件,就是我们刚刚创建的爬虫:
 
# -*- coding: utf-8 -*-
import scrapy
class XzxzbSpider(scrapy.Spider):
    name = 'xzxzb'
    allowed_domains = ['qidian.com']
    start_urls = ['http://qidian.com/']
    def parse(self, response):
        pass
start_urls 就是目录地址,爬虫会自动爬这个地址,然后结果就在下面的 parse 中处理。现在我们就来编写代码处理目录数据,首先爬取小说的主页,获取目录列表:
 
   def parse(self, response):
        pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')
        for page in pages:
            url = page.xpath('./child::a/attribute::href').extract()
            print url
        pass
获取网页中的 DOM 数据有两种方式,一种是使用 CSS 选择子,另外一种是使用 XML 的 xPath 查询。
 
这里我们用 xPath,相关知识请自行学习,看以上代码,首先我们通过 ID 获取目录框,获取类 cf 获取目录列表:
 
pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')
接着,遍历子节点,并查询 li 标签内 a 子节点的 href 属性,最后打印出来:
 
for page in pages:
            url = page.xpath('./child::a/attribute::href').extract()
            print url
这样,可以说爬取章节路径的小爬虫就写好了,使用如下命令运行 xzxzb 爬虫查看结果:
 
scrapy crawl xzxzb
这个时候我们的程序可能会出现如下错误:

  • 上一篇:新万博体育这个官网一直都很好的,大家可以点
  • 下一篇:没有了