网站开发哪里安全,最新的新闻 最新消息,网站里面的图片做桌面不清晰度,wordpress登入地址前言
最近有一点点爬虫需求#xff0c;想总结一下scrapy框架的一些基本使用方法#xff0c;加深印象#xff0c;自己一直习惯使用一些脚本文件运行爬虫#xff0c;面对数据量非常大#xff0c;稳定性要求比较高的#xff0c;效率需求比较高的情况下还是用scrapy较为合适…
前言
最近有一点点爬虫需求想总结一下scrapy框架的一些基本使用方法加深印象自己一直习惯使用一些脚本文件运行爬虫面对数据量非常大稳定性要求比较高的效率需求比较高的情况下还是用scrapy较为合适scrapy是一个异步的框架所有的请求都是阻塞的虽然在单文件脚本中也可以实现但是代码就非常的难看难以维护过了几天就会忘记复杂的流程调试起来就非常的困难scrapy我自己用得也不多但是觉得它非常地优秀有成熟的中间件支持方便的下载器稳定性效率非常地高但是其中的运行流程也稍微有些复杂难以理解异步框架处理BUG调试非常的麻烦。
初始化scrapy
首选需要安装scrapy 和selenium框架。
pip install scrapypip install selenium初始化框架
scrapy startproject testSpider 依据参考接着进入文件夹新建爬虫文件。
cd testSpiderscrapy genspider myspider example.com看看目录 selenium基本使用
selenium前言
今天只讲selenium的基本使用scrapy框架的流程后面再总结为什么要在在scrapy中使用selenium因为有些目标站点的接口是通过分析非常难以复现的通常会有一些混淆参数导致出现请求遇到拦截的情况也就是碰到反爬虫措施了需要分析Javascript代码分析其中参数的意思这种过程非常的复杂工程量非常大这也是目前高级爬虫的必备知识需要一些Javascript逆向知识例如行业中有非常著名的瑞数信息做了翻盘是属于顶尖的存在专门在一些金融政府网站上使用这种Javascript代码混淆技术自己也是稍微了解了一点点。
通过selenium可以绕过一些关键的有反扒的接口得到一些重要的信息。通常的情况就是使用selenium模拟有反爬措施的登录接口从而得到登录后cookie然后登陆过后的接口就没有反爬措施。
下载驱动
使用selenium就需要配套的浏览器驱动。我配套的浏览器就是chrome我自己的浏览器版本。 下载的版本 然后我把浏览器驱动放在浏览器的目录,然后配置了环境变量 关键代码
testSpider/spider/myspider.py就是关键代码目前的代码如下 import scrapyclass MyspiderSpider(scrapy.Spider):name myspiderallowed_domains [example.com]start_urls [http://example.com/]def parse(self, response):pass根据文章标题的需求我只需要使用在以上的文件进行编码就行了加入要使用到其他的接口爬取方法就要去更改testSpider/setting.py里面的设置如果感兴趣可以参考我之前的文章使用Scrapy框架爬取V2ex看看程序员中秋节都在讨论啥
直接亮代码拿七牛云的登录试了一下因为感觉他比较简单步骤较少适合做教程分享详细情况在注释中讲解 import scrapyfrom selenium.webdriver.chrome.options import Optionsfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECclass MyspiderSpider(scrapy.Spider):name myspiderallowed_domains [portal.qiniu.com] # 注意设置好允许爬取的网址列表这里踩了坑试了半天发现框架默认的解析器一直没有调用要写网址的整合域名而不是单单一级域名。start_urls [http://example.com/]user_name **********.compassword ********chorme_options Options()chorme_options.add_argument(--disable-gpu)driver webdriver.Chrome(optionschorme_options) # 初始化Chrome驱动driver.implicitly_wait(20)headers {authority: portal.qiniu.com,accept: */*,accept-language: zh-CN,zh;q0.9,cache-control: no-cache,referer: https://portal.qiniu.com/certificate/ssl,sec-ch-ua: .Not/A)Brand;v99, Google Chrome;v103, Chromium;v103,sec-ch-ua-mobile: ?0,sec-ch-ua-platform: Windows,sec-fetch-dest: empty,sec-fetch-mode: cors,sec-fetch-site: same-origin,user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36,} # headercookie {}def __del__(self):self.driver.close()def parse(self, response, *args, **kwargs):print(默认的解析器方法接口请求内容)print(response.json())def start_requests(self):self.driver.get(urlhttps://sso.qiniu.com/) # 直接访问登录页user_input self.driver.find_element(By.ID, email) # 获取用户名输入框user_input.send_keys(self.user_name) # 输入用户名password_input self.driver.find_element(By.ID, password) # 获取密码框password_input.send_keys(self.password) # 输入密码self.driver.find_element(By.ID, login-button).click() # 登录try:WebDriverWait(self.driver, 60).until(EC.visibility_of_element_located((By.CLASS_NAME, user-plane-entry))) # 等待网页跳转超时等待60秒except:print(登陆超时失败) # 等待超过了60self.driver.quit()self.cookie self.driver.get_cookies() # 获取cookie 此时是键值对print(self.cookie)print(self.headers)yield scrapy.Request(urlhttps://portal.qiniu.com/api/gaea/billboard/list?status1, callbackself.parse,cookiesself.cookie,headersself.headers) # 迭代器 放入异步任务中请求 从日志看看效果 已经正确打印了接口返回的内容假如直接请求接口会报错 总结
在scrapy 中使用selenium是一个非常常见的情况今天只稍微做一下简单的总结以后碰到的难点会一一记下来分享出来敬请期待。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你