在Scrapy Spider中使用PuppeterManaged浏览器的库

scrapy-puppeteer-client的Python项目详细描述


皮屑傀儡客户

此软件包旨在使用PuppeteerScrapy蜘蛛管理Chrome浏览器。 这样就可以对那些需要JS才能正常工作的站点进行抓取,并使其更像人类。 它是scrapy-puppeteer-service的客户端库。在

在⚠️ 此存储库正在开发中

这个项目正在开发中。使用它的风险由你自己承担。在

安装

使用pip(主分支):

$ pip install scrapy-puppeteer-client

配置

你应该开始scrapy-puppeteer-service。 {1>并启用下载器的URL}然后添加pupper:

^{pr2}$

基本用途

使用scrapypuppeteer.PuppeteerRequest代替scrapy.Request使用puppeter呈现URL:

importscrapyfromscrapypuppeteerimportPuppeteerRequestclassMySpider(scrapy.Spider):...defstart_requests(self):yieldPuppeteerRequest('https://exapmle.com',callback=self.parse)defparse(self,response):links=response.css(...)...

高级用法

PuppeteerRequest的第一个参数是浏览器操作。 可用操作在scrapypuppeteer.actions模块中定义为PuppeteerServiceAction的子类。 向请求传递URL是GoTo(url)操作的快捷方式。在

以下是可用操作的列表:

  • GoTo(url, options)-导航到URL
  • GoForward(options)-在历史中向前导航
  • GoBack(options)-返回历史
  • Click(selector, click_options, wait_options)-单击页面上的元素
  • Scroll(selector, wait_options)-滚动页面
  • Screenshot(options)-截图
  • CustomJsAction(js_function)-在第页计算JS函数

可用选项本质上是镜像service方法参数,而这些参数又在一定程度上镜像了puppeter API函数。 有关详细信息,请参见scrapypuppeteer.actions模块。在

您可以将close_page=False选项传递给请求,以便在请求完成后保留浏览器选项卡及其状态。 然后使用response.follow继续与同一选项卡交互:

importscrapyfromscrapypuppeteerimportPuppeteerRequestfromscrapypuppeteer.actionsimportClickclassMySpider(scrapy.Spider):...defstart_requests(self):yieldPuppeteerRequest('https://exapmle.com',close_page=False,callback=self.parse)defparse(self,response):...# parse and yield some items...next_page_selector='button.next-page-or-smth'ifresponse.css(next_page_selector):yieldresponse.follow(Click(next_page_selector,wait_options={'selectorOrTimeout':3000}),# wait 3 secondsclose_page=False,callback=self.parse)

在您的第一个请求服务将创建新的匿名浏览器上下文和新页面。 它们的id将作为context_idpage_id属性在响应对象中返回。 遵循这样的响应意味着将上下文和页面ID传递给下一个请求。 您还可以直接指定请求上下文和页面id。在

一旦您的spider关闭,中间件将负责关闭所有使用的浏览器上下文。在

托多

  • [x] 可以处理goto、click、scroll和actions的骨架
  • []标头和Cookie管理
  • []对puppeter的代理支持
  • []请求的错误处理
  • []har支持

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Oracle Java:NLS_区域是否足以正确格式化数字?   java开放Api$ref以使用url   如何在java中使用synchronized方法实现线程的同步?   java无法创建JVM Android studio   使用基本Java检查两个字符串是否是彼此的字谜   spring:如何将java安全配置转换为yml   java如何扩展任何移动服务提供商的SMSC?   如何转换java。util。日期到soap支持的日期格式“yyyyMMdd'T'HH:mm:ss”,带区域id   java Hibernate:中间关系   java从main中的其他类调用方法   java找出由两个长历元值表示的两个日期之间的差异   java更新cloudera quickstart vm以使用java7   java jOOQ将字符串转换为布尔值   java定制Android Spinner XML w/SpinnerAdapter?