路飞学城爬虫实战笔记(三)

scrapy

第一步
scrapy startproject xxx
cd xxx
scrapy genspider chouti chouti.com
scrapy crawl chouti /--nolog/
第二步
start_requests(设置爬取起始页)
第三步
parse函数
解析器
yield item
yield request()
第四步
cookies
获取cookies,
第一种:通过response.headers.getlist('Set-Cookie')
第二种:通过cookiejar来获取

第五部
去重规则
dont_filter=False 是否过滤
第六部
下载中间件

如何在scrapy中添加代理

方式一:scrapy内置添加代理功能
环境变量,os.environ 拿到当前环境变量
一个进程里创建一个环境变量os.environ['dangqian']='dangqian',别的进程不能读取
如果在环境变量里设置了(在start_requests里进行设置)
os.environ['HTTP_PROXY']='http://192.168.11.1:1234'
相当于设置了代理,
缺点不能切换代理,只能用这个代理
方式二:自定义下载中间件

问题:scrapy中如何处理https:


在middlewares中设置(1和2,看证书类型)

1. 要爬取网站使用的可信任证书(默认支持)
DOWNLOADER_HTTPCLIENTFACTORY = "scrapy.core.downloader.webclient.ScrapyHTTPClientFactory"
DOWNLOADER_CLIENTCONTEXTFACTORY = "scrapy.core.downloader.contextfactory.ScrapyClientContextFactory"

2. 要爬取网站使用的自定义证书
DOWNLOADER_HTTPCLIENTFACTORY = "scrapy.core.downloader.webclient.ScrapyHTTPClientFactory"
DOWNLOADER_CLIENTCONTEXTFACTORY = "step8_king.https.MySSLFactory"


# https.py
from scrapy.core.downloader.contextfactory import ScrapyClientContextFactory
from twisted.internet.ssl import (optionsForClientTLS, CertificateOptions, PrivateCertificate)

class MySSLFactory(ScrapyClientContextFactory):
def getCertificateOptions(self):
from OpenSSL import crypto
v1 = crypto.load_privatekey(crypto.FILETYPE_PEM, open('/Users/wupeiqi/client.key.unsecure', mode='r').read())
v2 = crypto.load_certificate(crypto.FILETYPE_PEM, open('/Users/wupeiqi/client.pem', mode='r').read())
return CertificateOptions(
privateKey=v1, # pKey对象
certificate=v2, # X509对象
verify=False,
method=getattr(self, 'method', getattr(self, '_ssl_method', None))
)
scrapy-redis
去重:DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_HOST = 'localhost' # 主机名
REDIS_PORT = 6379 # 端口
REDIS_URL = 'redis://user:pass@hostname:9001' # 连接URL(优先于以上配置)
REDIS_PARAMS = {} # Redis连接参数 默认:REDIS_PARAMS = {'socket_timeout': 3
REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient' # 指定连接Redis的Python模块 默认:redis.StrictRedis
REDIS_ENCODING = "utf-8"
信号(signals):
标记,connect
触发,send
优先级:
默认:深度加,优先级减
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'

抖音

1.requests(url ="",stream=true)

2前端,
  vue.js
  xx.js
npm install xxx(安装末一个模块)(node.js)
安装node.js
执行node命令,使用node运行js文件

3.分析http请求

4.玩过抖音

签名问题
1、python执行js代码,通过node运行js代码,通过python里的
subprocess.popen('..')
import os
result = os.popen('node js文件')

总结:爬虫要学的很多,js,前端,安卓都要涉及,scrapy源码更要弄懂

猜你喜欢

转载自www.cnblogs.com/Robertzewen/p/9302051.html