当前位置: 首页 > news >正文

新郑网站开发网站的seo如何设计

新郑网站开发,网站的seo如何设计,三杰网站建设,昆明网站代理爬虫scrapy中间件的使用 学习目标: 应用 scrapy中使用间件使用随机UA的方法应用 scrapy中使用代理ip的的方法应用 scrapy与selenium配合使用 1. scrapy中间件的分类和作用 1.1 scrapy中间件的分类 根据scrapy运行流程中所在位置不同分为: 下载中间件…

爬虫scrapy中间件的使用

学习目标:
  1. 应用 scrapy中使用间件使用随机UA的方法
  2. 应用 scrapy中使用代理ip的的方法
  3. 应用 scrapy与selenium配合使用

1. scrapy中间件的分类和作用

1.1 scrapy中间件的分类

根据scrapy运行流程中所在位置不同分为:

  1. 下载中间件
  2. 爬虫中间件
1.2 scrapy中间的作用:预处理request和response对象
  1. 对header以及cookie进行更换和处理
  2. 使用代理ip等
  3. 对请求进行定制化操作,

但在scrapy默认的情况下 两种中间件都在middlewares.py一个文件中

爬虫中间件使用方法和下载中间件相同,且功能重复,通常使用下载中间件

2. 下载中间件的使用方法:

接下来我们对腾讯招聘爬虫进行修改完善,通过下载中间件来学习如何使用中间件
编写一个Downloader Middlewares和我们编写一个pipeline一样,定义一个类,然后在setting中开启

Downloader Middlewares默认的方法:

  • process_request(self, request, spider):
    1. 当每个request通过下载中间件时,该方法被调用。
      2. 返回None值:没有return也是返回None,该request对象传递给下载器,或通过引擎传递给其他权重低的process_request方法
      3. 返回Response对象:不再请求,把response返回给引擎
      4. 返回Request对象:把request对象通过引擎交给调度器,此时将不通过其他权重低的process_request方法
  • process_response(self, request, response, spider):
    1. 当下载器完成http请求,传递响应给引擎的时候调用
      2. 返回Resposne:通过引擎交给爬虫处理或交给权重更低的其他下载中间件的process_response方法
      3. 返回Request对象:通过引擎交给调取器继续请求,此时将不通过其他权重低的process_request方法
  • 在settings.py中配置开启中间件,权重值越小越优先执行

3. 定义实现随机User-Agent的下载中间件

3.1 在middlewares.py中完善代码 middlewares.py中自带的代码可以删除掉
import random
from Tencent.settings import USER_AGENTS_LIST # 注意导入路径,请忽视pycharm的错误提示class UserAgentMiddleware(object):def process_request(self, request, spider):user_agent = random.choice(USER_AGENTS_LIST)request.headers['User-Agent'] = user_agent   # 不写return class CheckUA:def process_response(self,request,response,spider):print(request.headers['User-Agent'])return response # 不能少!
3.2 在settings中设置开启自定义的下载中间件,设置方法同管道
DOWNLOADER_MIDDLEWARES = {'Tencent.middlewares.UserAgentMiddleware': 543, # 543是权重值'Tencent.middlewares.CheckUA': 600, # 先执行543权重的中间件,再执行600的中间件
}
3.3 在settings中添加UA的列表
USER_AGENTS_LIST = ["Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)","Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)","Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0","Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
]
运行爬虫观察现象

4. 代理ip的使用

4.1 思路分析
  1. 代理添加的位置:request.meta中增加proxy字段
  2. 获取一个代理ip,赋值给request.meta['proxy']
    • 代理池中随机选择代理ip
    • 代理ip的webapi发送请求获取一个代理ip
4.2 具体实现

免费代理ip:

class ProxyMiddleware(object):def process_request(self,request,spider):# proxies可以在settings.py中,也可以来源于代理ip的webapi# proxy = random.choice(proxies) # 免费的会失效,报 111 connection refused 信息!重找一个代理ip再试proxy = 'https://1.71.188.37:3128' request.meta['proxy'] = proxyreturn None # 可以不写return

收费代理ip:

# 人民币玩家的代码(使用abuyun提供的代理ip)
import base64# 代理隧道验证信息  这个是在那个网站上申请的
proxyServer = 'http://proxy.abuyun.com:9010' # 收费的代理ip服务器地址,这里是abuyun
proxyUser = 用户名
proxyPass = 密码
proxyAuth = "Basic " + base64.b64encode(proxyUser + ":" + proxyPass)class ProxyMiddleware(object):def process_request(self, request, spider):# 设置代理request.meta["proxy"] = proxyServer# 设置认证request.headers["Proxy-Authorization"] = proxyAuth
4.3 检测代理ip是否可用

在使用了代理ip的情况下可以在下载中间件的process_response()方法中处理代理ip的使用情况,如果该代理ip不能使用可以替换其他代理ip

class ProxyMiddleware(object):......def process_response(self, request, response, spider):if response.status != '200':request.dont_filter = True # 重新发送的请求对象能够再次进入队列return requst
在settings.py中开启该中间件

5. 在中间件中使用selenium

5.1 在爬虫文件中配置好浏览器信
#设置一个无头无可视化界面的浏览器
chrome_options = Options()
# 无可视化界面
chrome_options.add_argument("--headless")
chrome_options.add_argument("--di sable-gpu")  
# 规避监测
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
self.browse = webdriver.Chrome(options=chrome_options)
5.2 在middlewares.py中使用selenium
# 开始拦截篡改下载中间件
class NewsSpiderDownloaderMiddleware:# Not all methods need to be defined. If a method is not defined,# scrapy acts as if the downloader middleware does not modify the# passed objects.@classmethoddef from_crawler(cls, crawler):# This method is used by Scrapy to create your spiders.s = cls()crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)return sdef process_request(self, request, spider):# Called for each request that goes through the downloader# middleware.# Must either:# - return None: continue processing this request# - or return a Response object# - or return a Request object# - or raise IgnoreRequest: process_exception() methods of#   installed downloader middleware will be calledreturn None# 该方法拦截四大板块对应的响应对象 且篡改# 注意settings文件中一定要启动对应权限def process_response(self, request, response, spider):# 对需要篡改部分做判断 否则会影响其他请求对应的repsonseif request.url in spider.module_urls:  # 获取从爬虫程序中创建出的浏览器对象browse = spider.browse# 通过selenium向四大板块的url发起请求,获取到动态加载的数据browse.get(request.url)# 下拉翻页browse.execute_script('window.scrollTo(0,document.body.scrollHeight)')time.sleep(1.5)# 获取源码page_text = browse.page_source#针对定位到的response进行篡改# 这里的篡改指实例化一个新的响应对象(符合需求:包含动态加载的数据),替换(HtmlResponse)原来的响应对象# 参数解释:url:响应对应的url body:响应体  requests:scrapy中的请求对象,数据都是跟着请求对象走的new_response = HtmlResponse(url=request.url, body=page_text, encoding='utf-8', request=request)return new_response  # 篡改响应对象 不再经过download,直接将新的响应体返回给引擎# 此时就可以回到爬虫文件继续往下写  判断如果是selenium请求过来的我们才返回处理后的new_responseelse:# 其他请求对应的响应对象return response # return responsedef process_exception(self, request, exception, spider):# Called when a download handler or a process_request()# (from other downloader middleware) raises an exception.# Must either:# - return None: continue processing this exception# - return a Response object: stops process_exception() chain# - return a Request object: stops process_exception() chainpassdef spider_opened(self, spider):spider.logger.info('Spider opened: %s' % spider.name)
配置文件中设置开启该中间件后,运行爬虫可以在日志信息中看到selenium相关内容

小结

中间件的使用:

  1. 完善中间件代码:
  • process_request(self, request, spider):
    1. 当每个request通过下载中间件时,该方法被调用。
    2. 返回None值:没有return也是返回None,该request对象传递给下载器,或通过引擎传递给其他权重低的process_request方法
    3. 返回Response对象:不再请求,把response返回给引擎
    4. 返回Request对象:把request对象通过引擎交给调度器,此时将不通过其他权重低的process_request方法
  • process_response(self, request, response, spider):
    1. 当下载器完成http请求,传递响应给引擎的时候调用
    2. 返回Resposne:通过引擎交给爬虫处理或交给权重更低的其他下载中间件的process_response方法
    3. 返回Request对象:通过引擎交给调取器继续请求,此时将不通过其他权重低的process_request方法
  1. 需要在settings.py中开启中间件
    DOWNLOADER_MIDDLEWARES = {
    ‘myspider.middlewares.UserAgentMiddleware’: 543,
    }
http://www.yayakq.cn/news/217161/

相关文章:

  • 什么网站能看到专业的做面包视频动态h5网站开发
  • 上海数据开放网站建设大连关键词
  • 成都网站建设免费咨询梧州网站建设推荐
  • 深圳外贸公司网站汶上网站开发
  • 中文门户网站有哪些汽车网站建设策划方案
  • 做网站排名2022全国封城名单
  • 设计配色网站为什么大家用wordpress建网站
  • 官网网站开发2022年新闻大事
  • 宝安网站开发系统清理优化工具
  • 建设网站是否等于网络营销wordpress 积分 兑换
  • 石河子规划建设局网站安徽注册公司网站
  • ps和vscode做网站网站建设网站设计多少钱
  • 广东哪家网站建设哪家公司好通辽网站公司
  • 长沙网站seo按天计费二级域名网站查询
  • 网站定制价格wordpress square主题
  • 网站为什么被降权游戏代理0加盟费
  • 网上网站怎么做设计网站建设价格
  • 网站建设作品图片网站建设需要学什么能力
  • 专门做库存的网站深圳沙头网站建设
  • 做网站所需要的技术企业文化网站建设
  • 怎么自己编写网站杭州首传网站建设公司怎么样
  • 怎样自己创造网站网站后台都有哪些
  • 凡科这样的建站网站权威发布
  • 嘉兴网站建设有前途吗网站开发保密合同
  • 微信公众好第三方网站怎么做网站开发哪一门语言更快
  • 苏州h5建站百度应用商店
  • 建站之星破解版手机什么是网络营销4c理论
  • 网站制作教程下载全国企业信息公示查询系统官网
  • 网站百度云链接模板网的图片侵权
  • 安徽住房建设厅网站鲜花销售网站模板