【python爬虫】Pycharm+Scrapy+win10搭建scrapy

系统 1638 0

准备工作

基础环境准备

  • win10
  • pycharm
  • python3(同时保证有pip环境)

scrapy环境准备

  1. 打开网址 https://www.lfd.uci.edu/~gohlke/pythonlibs/
  2. 下载Twisted(按python版本+系统位数对应)(浏览器下ctrl+f直接搜索)
  3. 下载scrapy (截止本文撰写,当前版本是:Scrapy-1.6.0-py2.py3-NONE-any.whl)(不区分系统和python版本)
  4. 准备好这两个whl文件(我习惯在桌面建个临时文件夹,然后把他俩扔进去)
  5. 安装whl:在文件夹下按住shift 然后点击右键,选择在此处打开powershell。
  6. 执行命令 pip install teisted文件名
  7. 执行命令 pip install scrapy文件名
  8. 等待安装完成后 执行命令 pip list 查看已经安装的python包中是否有上面两个模块,正常的话都有了。
  9. 如图,安装成功

【python爬虫】Pycharm+Scrapy+win10搭建scrapy开发环境+运行一个Demo_第1张图片

pycharm创建一个scrapy项目

创建一个项目

  • 打开pycharm 创建一个普通的项目
    【python爬虫】Pycharm+Scrapy+win10搭建scrapy开发环境+运行一个Demo_第2张图片
  • 打开pycharm自带的终端:terminal
  • 执行命令 scrapy startproject demodemo
  • 创建目录如图
    【python爬虫】Pycharm+Scrapy+win10搭建scrapy开发环境+运行一个Demo_第3张图片
    各个文件的用处:
            
              ../demodemo/           		 # 爬虫项目
	demodemo/         		 # 爬虫文件夹
	__init__.py    			 # 必须存在
	items.py        			# 字段 可以写需要爬取对象的类
	middlewares.py		#中间件
	pipelines.py				# 管道文件
	settings.py     			# 爬取配置
	spiders/        			# 开发位置
    scrapy.cfg          # 项目配置

            
          

写一个DEMO

  1. 在terminal中通过cd命令进入到spiders文件夹
  2. 执行命令 scrapy genspider 爬虫名 爬虫域
  3. 在我的demo中:``````(对应的是 随便找了一个段子网站:https://ishuo.cn/ )
  4. 编辑items.py
            
              
                # -*- coding: utf-8 -*-
              
              
                # Define here the models for your scraped items
              
              
                #
              
              
                # See documentation in:
              
              
                # https://doc.scrapy.org/en/latest/topics/items.html
              
              
                #
              
              
                # import scrapy
              
              
                #
              
              
                #
              
              
                # class DemodemoItem(scrapy.Item):
              
              
                #     # define the fields for your item here like:
              
              
                #     # name = scrapy.Field()
              
              
                #     pass
              
              
                import
              
               scrapy


              
                class
              
              
                DuanZiItem
              
              
                (
              
              scrapy
              
                .
              
              Item
              
                )
              
              
                :
              
              
                # 作者
              
              
    author 
              
                =
              
               scrapy
              
                .
              
              Field
              
                (
              
              
                )
              
              
                # 内容
              
              
    word 
              
                =
              
               scrapy
              
                .
              
              Field
              
                (
              
              
                )
              
            
          
  1. 编辑spiders/Duanzi.py
            
              
                # -*- coding: utf-8 -*-
              
              
                # import scrapy
              
              
                #
              
              
                #
              
              
                # class DuanziSpider(scrapy.Spider):
              
              
                #     name = 'Duanzi'
              
              
                #     allowed_domains = ['ishuo.cn']
              
              
                #     start_urls = ['http://ishuo.cn/']
              
              
                #
              
              
                #     def parse(self, response):
              
              
                #         pass
              
              
                # -*- coding: utf-8 -*-
              
              
                import
              
               scrapy

              
                from
              
               demodemo
              
                .
              
              items 
              
                import
              
               DuanZiItem


              
                class
              
              
                DemospiderSpider
              
              
                (
              
              scrapy
              
                .
              
              Spider
              
                )
              
              
                :
              
              
                # 爬虫名称
              
              
    name 
              
                =
              
              
                'duanzi'
              
              
                # 爬虫域
              
              
    allowed_domains 
              
                =
              
              
                [
              
              
                'ishuo.cn'
              
              
                ]
              
              
                # 爬虫地址
              
              
    start_urls 
              
                =
              
              
                [
              
              
                'http://ishuo.cn/'
              
              
                ]
              
              
                # 处理回复
              
              
                def
              
              
                parse
              
              
                (
              
              self
              
                ,
              
               response
              
                )
              
              
                :
              
              
        data_list 
              
                =
              
              
                [
              
              
                ]
              
              
        text_list 
              
                =
              
               response
              
                .
              
              xpath
              
                (
              
              
                "//div[@id=\"list\"]/ul/li"
              
              
                )
              
              
                for
              
               item 
              
                in
              
               text_list
              
                :
              
              
            word 
              
                =
              
               item
              
                .
              
              xpath
              
                (
              
              
                './div[@class=\"content\"]/text()'
              
              
                )
              
              
                .
              
              extract
              
                (
              
              
                )
              
              
                [
              
              
                0
              
              
                ]
              
              
            author 
              
                =
              
               item
              
                .
              
              xpath
              
                (
              
              
                './div[@class="info"]/a/text()'
              
              
                )
              
              
                .
              
              extract
              
                (
              
              
                )
              
              
                [
              
              
                0
              
              
                ]
              
              
            ddata 
              
                =
              
               DuanZiItem
              
                (
              
              
                )
              
              
            ddata
              
                [
              
              
                'author'
              
              
                ]
              
              
                =
              
               author
            ddata
              
                [
              
              
                'word'
              
              
                ]
              
              
                =
              
               word

            data_list
              
                .
              
              append
              
                (
              
              ddata
              
                )
              
              
                pass
              
              
                # print(data_list)
              
              
                with
              
              
                open
              
              
                (
              
              
                "demo.txt"
              
              
                ,
              
              
                "w"
              
              
                ,
              
              encoding
              
                =
              
              
                "utf-8"
              
              
                )
              
              
                as
              
               f
              
                :
              
              
              f
              
                .
              
              write
              
                (
              
              
                str
              
              
                (
              
              data_list
              
                )
              
              
                )
              
            
          
  1. 编辑setting.py
    修改一个值
            
              
ROBOTSTXT_OBEY 
              
                =
              
              
                False
              
            
          

添加一个请求头

            
              
DEFAULT_REQUEST_HEADERS 
              
                =
              
              
                {
              
              
                "user-agent"
              
              
                :
              
              
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
              
              
                ,
              
              
                'Accept'
              
              
                :
              
              
                'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
              
              
                ,
              
              
                # 'Accept-Language': 'en',
              
              
                }
              
            
          
  1. 注意:这句话会报错 from demodemo.items import DuanZiItem
    是因为本地包路径的问题
    解决方案:选中项目名
    (是scrapy项目名:demodemo 不是pycharm项目名demo)
    右键
    【python爬虫】Pycharm+Scrapy+win10搭建scrapy开发环境+运行一个Demo_第4张图片

运行scrapy

执行命令:
scrapy crawl duanzi
即可看到一个txt文件

如何让pycharm运行scrapy

  1. 编写一个脚本
    放到项目根目录(与.cfg同目录)
    start.py
            
              
                # -*- coding:utf-8 -*-
              
              
                from
              
               scrapy 
              
                import
              
               cmdline
cmdline
              
                .
              
              execute
              
                (
              
              
                "scrapy crawl duanzi"
              
              
                .
              
              split
              
                (
              
              
                )
              
              
                )
              
            
          

【python爬虫】Pycharm+Scrapy+win10搭建scrapy开发环境+运行一个Demo_第5张图片
3.
【python爬虫】Pycharm+Scrapy+win10搭建scrapy开发环境+运行一个Demo_第6张图片
4.选择刚才的start.py 并给这个脚本起个名字
apply

【完】

欢迎关注我的微信公众号:并非一无所有


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论