selenium不显示浏览器_selenium不显示浏览器

selenium不显示浏览器_selenium不显示浏览器在scrapy中实现selenium的并发,同时打开多少页面同时操作

爬取https://lcsc.com/products/Connectors_365.html这个网址下所有的表格数据。

selenium不显示浏览器_selenium不显示浏览器

蓝色的都是要爬取的子页面,要爬取子页面里面的表格数据 ,表格数据如下:

selenium不显示浏览器_selenium不显示浏览器

右上角可以选择页面展示的商品数量,如果默认的25,最大500。研究发现,每个表格的表头都是不一样的!其中Pracing这一列的数据是动态加载的。

分析完网页后写了个简单脚本单独用selenium来爬取,运行后初步测算完全爬取完需要30个小时,黄花菜凉了。然后把代码集成到scrapy中发现也需要4个小时才能爬取完,最后在网上找到scrapy_ajax_utils这个包,实现了selenium的并发,对这个网站没有做很多的测试,我设置的并发数为5,大概1个小时左右爬取完。4除以5,嗯,差不多。。。感谢作者。整个代码细节非常的多,所以看上去十分复杂,请见谅。

下面是完整代码。

spider代码如下:


import scrapy
from scrapy import signals
from selenium.webdriver import Chrome
from  selenium.webdriver.chrome.options import Options
from ..middlewares import ThlcscDownloaderMiddleware
import re
from ..items import LcscItem,Create_Item
from scrapy_ajax_utils import selenium_support, SeleniumRequest



@selenium_support
class ThlcscSpider(scrapy.Spider):
    '''
    scrapy 中间件process_response返回的response会自动过滤掉请求失败的response,回调函数就接受不到这个response,
    但失败的response中有需要的参数,所以为保证爬取数据的完整性,要加handle_httpstatus_list = [404]。
    '''
    handle_httpstatus_list = [404]
    name = 'thlcsc'
    allowed_domains = ['lcsc.com']
    start_urls = ['https://lcsc.com/products/Connectors_365.html']


    def parse(self,response):

          urls=response.xpath('//*[@id="app"]/div/main/div/div/div[2]/div/div/div/a/@href').extract()
          for url in urls:
              url='https://lcsc.com'+url 
              #请注意这个handler参数,如果要对网页执行模拟操作,要带上handler,这个参数必须接收一个方法,方法可以自己定义,个人研究后发现直接把DownloaderMiddleware中的process_request传给它是最好最方便的。                                                                                 
              yield SeleniumRequest(url,meta={"middleware":"LcscDownloaderMiddleware"},callback=self.parse_url,handler=ThlcscDownloaderMiddleware.process_request)

    def parse_url(self, response):
                           
        flags=response.flags  #flags是response对象的一个实例属性,这个属性就是一个空列表,专门用来传数据的,跟request对象中的meta作用差不多。
        address=flags[0]     #address记录的是请求来自哪个url,如https://lcsc.com/products/Pin-Headers_644.html。。。addres就是Pin-Headers
        lis=flags[1]       #lis是列表,里面包含了这个url下所有页面的HtmlResponse对象。

        for response in lis:
            n=response.flags[0] #这个flags记录的是当前这个HtmlResponse表来自于第几页,也就下载中间件的循环中的n

            thead_new = []
            theads =response.xpath('//*[@id="app"]/div[1]/main/div/div/section/div[4]/div/div[2]/table/thead//text()').extract()
            #theads是个列表,把列表中的空值和换行符去掉,剩下的就是表头数据,把它们放进新列表中
            for thead in theads:
               

今天的文章selenium不显示浏览器_selenium不显示浏览器分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82597.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注