scrapy 自学入门demo分享

发布时间:2019-06-22 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了scrapy 自学入门demo分享脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
本文基于python 3.7.0,win10平台; 2018-08

完整项目代码:https://github.com/NameHewei/python-scrapy

安装

安装python

  1. 官网下载 https://www.python.org/
  2. 注意环境变量是否配置成功

安装scrapy

为了安装顺利,请备好梯子
  • pip install Scrapy

安装过程中注意以下报错信息:

Microsoft Visual C++ 14.0 is required. Get IT with "Microsoft Visual C++ Build Tools"

解决办法:

  1. https://www.lfd.uci.edu/~gohl... 下载对应版本twisted的whl文件
  2. cp:表示python版本
  3. amd64:表示64位
  4. 下载后在文件目录下执行: pip install Twisted-18.7.0-cP37-cp37m-win_amd64.whl(文件名)

创建项目

  • 创建scrapy:scrapy startPRoject youName
  • 创建spider:scrapy genspider <name> <domain> // 在项目跟目录执行

配置settings.py文件

  1. 如果抓取的内容包含中文可配置:FEED_export_ENCODING = 'utf-8'
  2. 报错误信息403:把USER_AGENT加上(可在网站请求头信息中查看)

编写items.py文件

import scrapy

class NovelItem(scrapy.Item):
    title = scrapy.Field()
    content = scrapy.Field()

这些即你需要保存的字段名

编写spider

import scrapy

# 引入自定义的items
From mytest.items import NovelItem

# # 继承scrapy.Spider
class NovelSpider(scrapy.Spider):
    # 爬虫名
    name = @H_304_117@'novel_spider'
    # 允许的域名
    Allowed_domains = ['http://www.danmeila.COM']
    # 入口url 扔到调度器里面去
    start_urls = ['http://www.danmeila.com/chapter/20180406/29649.htML']


    def parse(self, response):
        movieList = response.xpath('//*[@id="container"]/div[3]/div[2]/div[2]/div/div/ul/li')
        novelContent = NovelItem()
        for item in movieList:
            u = 'http://www.danmeila.com' + item.xpath('.//a/@href').extract_First()
            
            yield scrapy.Request(u, callback= self.content_a, meta= { 'nc': novelContent }, dont_filter = True)
            # 放到管道里否则 piPEline获取不到
            # 如果你发现拿到的内容一直为空,注意是否被过滤了,即dont_filter没有设置


    def content_a(self, response):
        novelContent = response.meta['nc']
        novelContent['title'] = response.xpath('//*[@id="J_article"]/div[1]/h1/text()').extract_first()

        yield novelContent

注意以下几点:

  • 采用xpath编写,在浏览器中可以直接查看元素,找到要爬取内容的标签,右键选copy xpath
  • extract_first()的使用;text() 获取文本;@属性名 获取属性值
  • 在父节点下使用xpath路径前要加./
  • 去除换行空格用 xpath('normalize-space('.//div/text()')')

执行

导出为json: scrapy crawl your-spider-name -o test.json

如果出现报错信息:

  • async语法错误,把用到该名称作为参数的文件全部作修改 把这个参数名改为其它即可
  • 报错 No module named 'win32api': 到https://pypi.org/project/pypi...(下载文件pypiwin32-223-py3-none-any.whl 执行 pip install pypiwin32-223-py3-none-any.whl )
欢迎交流 Github

脚本宝典总结

以上是脚本宝典为你收集整理的scrapy 自学入门demo分享全部内容,希望文章能够帮你解决scrapy 自学入门demo分享所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。