爬取https://lcsc.com/products/Connectors_365.html这个网址下所有的表格数据。
蓝色的都是要爬取的子页面,要爬取子页面里面的表格数据 ,表格数据如下:
右上角可以选择页面展示的商品数量,如果默认的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