环境:Mac,Python3。
Scrapy官网 https://scrapy.org/
1.安装Scrapy
1 2 3 4 |
$ pip3 install scrapy $ scrapy version > -bash: scrapy: command not found $ ln -s /Users/moonmen/Library/Python/3.7/bin/scrapy /usr/local/bin/scrapy |
2.开发方式1
作为项目的方式。
2.1. 创建项目
1 2 3 4 5 |
$ scrapy startproject jianshuProject # jianshuProject是项目名 $ cd jianshuProject $ ls # 会看到一个 scrapy.cfg文件 和 同项目重名的jianshuProject文件夹 $ scrapy genspider jianshuSpider jianshu.com # jianshuSpider是爬虫名,jianshu.com是限制爬取网站 |
最终目录结构:
1 2 3 4 5 6 7 8 9 10 11 |
jianshuProject |- spider.cfg |_ jianshuProject |- spiders | |- __init__.py | |_ jianshuSpider.py |- __init__.py |- items.py |- middlewares.py |- pipelines.py |_ settings.py |
2.2.实现爬虫
pyChram打开jianshuProject
2.2.1 jianshuSpider.py
1 2 3 4 5 6 7 8 9 10 11 |
import scrapy # 类名是'scrapy genspider'指令 第一个参数 jianshuSpider 全小写后加'Spider'后缀 class JianshuspiderSpider(scrapy.Spider): name = 'jianshuSpider' # 'scrapy genspider'指令 第1个参数 jianshuSpider 爬虫名称。必须的参数 allowed_domains = ['jianshu.com'] # 'scrapy genspider'指令 第2个参数 jianshu.com 只允许爬取这个域名下的链接 # start_urls = ['http://jianshu.com/'] # 根据 限制爬取网站 推测的爬虫入口。根据需要修改 start_urls = ['https://www.jianshu.com/u/eebc67b39dcb'] def parse(self, response): print(response.body) # 在这里对响应数据进行处理 |
2.2.2 settings.py
找到 ROBOTSTXT_OBEY 一项,TRUE表示遵守目标网站的 robots.txt 协议只访问允许的页面,False表示不遵守-访问全部页面。
找到 DEFAULT_REQUEST_HEADERS 一项,解除注释,并添加一个请求头参数 User-Agent 。
1 2 3 4 5 6 7 8 9 |
# Obey robots.txt rules ROBOTSTXT_OBEY = True # Override the default request headers: DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36' } |
2.3.测试
进入项目根目录,即spider.cfg的同级目录。
1 2 |
$ scrapy crawl jianshuSpider # jianshuSpider即爬虫名称 |
3.开发方式2
作为一般脚本开发。
直接创建一个scrapy_demo.py 。代码同上面的jianshuSpider.py,类名和爬虫名都自定义即可。
1 2 3 4 5 6 7 8 |
import scrapy class NonameSpider(scrapy.Spider): name = 'just_scrapy_shell_test' start_urls = ['https://www.jianshu.com/u/eebc67b39dcb'] def parse(self, response): print(response.body) |
然后,直接执行py文件。
1 2 |
$ scrapy runspider scrapy_demo.py -s USER_AGENT='Mozills/5.0' |
-end
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/2507.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设