Hello World!
Toggle navigation
Home
开发
运维部署
旧博客搬家
About Me
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Archives
Tags
Scrapy爬虫开发
2019-09-06 06:13:45
59
0
0
lion
# 1、安装建议 #环境 python 3.7+ #框架 pip install scrapy #部署服务(Job化运行平台) pip install scrapyd #打包工具 pip install scrapyd-client #Job管理平台 pip install spiderkeeper # 配置化爬虫平台 pip install Gerapy # 管理平台3(界面丑) pip install scrapydweb demo: http://scrapydweb.herokuapp.com/1/settings/ # 可视化工具(不如浏览器的开发工具好用) potia可视化爬取:https://github.com/scrapinghub/portia potia2code转换为爬虫代码:https://github.com/scrapinghub/portia2code potia官网在线:https://app.scrapinghub.com/ # 2、开发 ### 创建工程: scrapy startproject tutorial ### 开发spider: 按照spider目录下的myspider.py格式,创建自已的爬虫,注意name为爬虫名称,支持点号等 ### 打包egg 打包成egg就可以放入spiderkeeper或scrapydweb部署运行 #### 1 修改scrapy.cfg # Automatically created by: scrapy startproject # For more information about the [deploy] section see: # https://scrapyd.readthedocs.io/en/latest/deploy.html [settings] default = TestSpider.settings [deploy:m.cnstock.com] #url = http://localhost:6800/ project = TestSpider [deploy:www.jwview.com.m] #url = http://localhost:6800/ project = TestSpider [deploy:m.21jingji.com] #url = http://localhost:6800/ project = TestSpider #### 2 打包命令 scrapyd-deploy --build-egg output.egg (注意在scrapy.cfg所在目录运行) ## 2.1 CrawlSpider 可实现配置化的简单爬虫 ## 2.2 poria 可视化工具 运行:docker run -i -t --rm -v test:/app/data/projects:rw -p 9001:9001 scrapinghub/portia 实验效果不好 ## 2.3 图片下载 使用pipline ### 1、安装 pip install Pillow ### 2、settting.py中,新加以下: ITEM_PIPELINES= {'scrapy.pipelines.images.ImagesPipeline':300} IMAGES_STORE = 'E:/li/temp/pic' #设置图片下载路径 MEDIA_ALLOW_REDIRECTS=True #有时候会产生重定向,要允许 ### 3、items.py中增加字段: image_urls = scrapy.Field() images = scrapy.Field() ### 4、代码中,在parse中,返回 item实例,并赋值image_urls为要下载的图片(注意赋值为数组) item = tutorial.items.TutorialItem() item['image_urls']=['http://img.jpg'] return item ### 5、自定义存储:https://www.cnblogs.com/pywjh/p/9951655.html ## 2.4 Spiderkeeper(爬虫管理) 用于部署和job管理 基于scrapyd,支持scrapy 1.7 + 界面简洁好操作 上传egg部署 ### 2.4.1、部署 如果scrapyd未启动,先启动scrapyd(默认6800端口) 再运行 spiderkeeper(scrapyd同一台机器上,无需参数,否则指定 --server=ip:port) 进入 http://ip:5000/ ,进入管理控制台,默认账号密码 admin/admin 创建项目,然后进入deploy菜单,上传egg包部署。 然后,创建运行计划 (如果部署成功了,但是在创建计划时,选不到对应Spider,先确认依赖的pip包,在目标机上都有安装,因为缺少包时,部署实际会失败,但spiderkeeper不提示) ## 2.5 Gerapy(可配置爬虫) 需要另外部署scrapyd,且截止当前(2019/9/30)只支持 scrapyd <=1.6,不支持1.7 最简单的方式是docker 功能: 1、配置化创建爬虫(简单网站),基于CrawlSpider,自动生成代码并打包成egg,部署到scrapyd,并可管理job。 (目前不支持自己上传egg) 2、配置时有部份可视化拾取css和xpath附加功能,方便创建Rule和Exports 3、支持存储到mongodb和mysql 4、pip安装时,需加参数--pre版本,因为stable版本比较旧,功能不全。 ## 2.6 pycharm调试 打开Debug Configuration窗口,修改以下: Script Path:C:\Program Files\Python373\Lib\site-packages\scrapy\cmdline.py Parameters:crawl 爬虫名称 Working Directory:爬虫project目录 环境变量:按需,可通过os.environ.get 读取,可用于区分调试时参数 ## 2.7 Javascript渲染 需要: Splash :一个单独的js渲染服务,docker run -p 8050:8050 scrapinghub/splash pip install scrapy-splash:爬虫插件,会将请求定向到Splash服务进行渲染 ### 2.7.1 配置 SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, } DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':544, 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } SPLASH_URL = 'http://172.18.22.169:8050' #Splash服务地址 DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' #重写防重复中间件 ### 2.7.2 使用 from scrapy_splash import SplashRequest yield SplashRequest(url=u, callback=self.parsebody,headers={},args={'wait': 0.5}) ### 2.7.3 代理 request.meta['splash']['args']['proxy'] = 'http://username:password@IP:port' ### 2.7.4 执行JS脚本 script = """ function main(splash, args) splash:go(args.url) local scroll_to = splash:jsfunc("window.scrollTo") scroll_to(0, 2800) splash:set_viewport_full() splash:wait(5) return {html=splash:html()} end """ # 模拟点击采用js的方式 script = """ function main(splash, args) splash.images_enabled = false assert(splash:go(args.url)) assert(splash:wait(1)) js = string.format("document.querySelector('#sxxz > li:nth-child(3) > a').click();", args.page) splash:runjs(js) assert(splash:wait(1)) return splash:html() end """ url = 'https://blog.csdn.net/' yield SplashRequest(url, self.parse, endpoint='execute', args={'lua_source': script, 'url': url}) 原文链接:https://blog.csdn.net/zhao_5352269/article/details/82885166
Pre:
K8s
Next:
Asp.net Core 使用 Http2.0相关
0
likes
59
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
目录