标签:一个开始 def pycharm 判断 xxx requests 格式 scrapy 命令行
Scarp框架
首先, spiders 给我们一个初始的URL, spider获取列表页内的详情页的url.
其次, 将url 存储到scheduler内, 然后 scheduler 就会自动将url放到downloader内执行.
详情页download之后, 返回response给spiders.
再次, spiders会将response获取到并且查找需要的内容, 内容进行封装item.
最后, 这个item就会被传输到itempipeline中, 存储或者其他操作.
安装scrapy的方法:
pip install wheel
pip install 你的路径/Twisted-18.7.0-cp35-cp35m-win_amd64.whl
pip install scrapy
缺少win32api
https://germey.gitbooks.io/python3webspider/content/1.8.2-Scrapy%E7%9A%84%E5%AE%89%E8%A3%85.html
创建项目:
在pycharm中选中目录右键open terminal 进入命令窗口执行如下:
scrapy startproject scrapy_project(项目名)
创建spider 进入scrapy_project中
cd scrapy_project
scrapy genspider bole jobbole.com
(scrapy genspider 项目名(spider.py) 爬取网址)
运行, 创建一个main.py, main.py 的内容就是:(用于运行启动整个项目,可以避免每次都去terminal输入命令)
from scrapy.cmdline import execute
execute(‘scrapy crawl bole‘.split())
bole:要执行的spider里的py文件名
Scrapy文件结构
继承scrapy.item
属性 变量名=scrapy.Field()
ITEM_PIPELINES = {
‘myproject.pipelines.XiaochengxuPipeline‘: 300,
#’项目名+pipelines+pipelines.py中的类’:300,
}
#下载延迟
3.1 DOWNLOADER_MIDDLEWARES = {
‘myproject.middlewares.MyprojectDownloaderMiddleware‘: 543,
}
Isinstance 判断那个类的实例
通过xpath获取内容, xpath返回的元素内容是selector: extract_first() = [0]extract()
zan = response.xpath(‘//h10[@id="89252votetotal"]/text()‘).extract_first()
extract_first() 获取selector内的data的内容
items.py
# 添加内容到item中 固定格式
titile = scrapy.Field()
zan = scrapy.Field()
bole.py
from myproject.items import BoleItem
#创建Item的类
item = BoleItem()
# 通过字典的形式填充item的类
item[‘title’] = title
item[‘zan’] = zan
# 相当于将item传给pipelines
yield item
Items.py
class BoleItem(scrapy.Item):
# 变量=scrapy.Field() 将bole.py的内容获取过来
title = scrapy.Field()
zan = scrapy.Field()
名称 = scrapy.Field()
class BolePipeline(object):
def process_item(self, item, spider):
#变量=item[‘title‘] 接收items中的内容
item 相关的操作:
Settings.py
ITEM_PIPELINES = {
# ‘myproject.pipelines.MyprojectPipeline‘: 300,
‘myproject.pipelines.BolePipeline‘: 300,
#固定格式.固定格式.pipeline.py中创建的类名:300 300是优先级 优先级越低优先级越高
}
Pycharm中点击Terminal 输入:
Scarpy shell +要访问的url
进入输入命令行然后输入要匹配的xpath或用其他方法要匹配的信息
//td[not(@class)][1]/a/text() 取没有class中的第一个
Yield 返回时多个参数meta={‘item‘:item}
参数一:item[‘url_herf‘]让函数parse_detail去处理的url
参数二:meta={‘item‘:item}可在函数parse_detail中item = response.meta[‘item‘]调用之后一同返回yield item
参数三:callback=self.parse_detail 之后要处理的函数
Yield scrapy.Request(item[‘url_herf‘],meta={‘item‘:item},callback=self.parse_detail)
# 没有此步数据库会报错1241 因为里面有换行符需要处理连接成字符串
新变量 = ‘‘.join(旧变量)
拉勾网需要不记录cookie,需要在setting中将cookie:False 开启
Crawl模板
1 spiders:
输入:
输出:
输入:
url(Request) 输入的模块是:spiders, pipeline, downloader
输出:
url (Request) 输出的模块只有downloader
输入:
Request, 来源是scheduler
输出:
response: 接收方spiders
request 接收方就是scheduler
输入:
item, spiders生成的
输出:
不确定, (数据库, 文件, 其它)
Request, 给scheduler
Redis安装
找到文件Redis-x64-3.2.100.msi安装
解压redis-desktop-manager.rar中一个文件夹 高版本为中文
在Python环境中安装scrapy-redis:pip install scrapy-redis
导包:from scrapy_redis.spiders import RedisSpider
2.将爬虫中的start_urls删掉。增加一个redis_key="xxx"。这个redis_key是为了以后在redis中控制爬虫启动的。爬虫的第一个url,就是在redis中通过这个发送出去的。
3.在配置文件中增加如下配置:
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
ITEM_PIPELINES = { ‘scrapy_redis.pipelines.RedisPipeline‘: 300}
SCHEDULER_PERSIST = True
REDIS_HOST = ‘127.0.0.1‘
REDIS_PORT = 6379
REDIS_PASSWORD = 123456
运行爬虫:
在爬虫服务器上(pychong)。进入爬虫文件所在的路径,然后输入命令: scrapy runspider [爬虫文件.py]。
在Redis服务器上,推入一个开始的url链接:在redis安装目录下运行redis-cli.exe;命令行输入:lpush [redis_key] start_url 开始爬取。
在Mysql中添加用户:grant all on *.* to root@’%’ identified by ’密码’;
在Mysql中查询用户:select user,host from mysql.user;
标签:一个开始 def pycharm 判断 xxx requests 格式 scrapy 命令行
原文地址:https://www.cnblogs.com/Dark-fire-liehuo/p/10090650.html