使用selenium+python+webdriver遍历采集三级页面信息

问题:

在使用自动化工具采集三级甚至四级页面时,因为需要遍历采集信息,当我们采集完第四级页面后,如何返回列表页进行翻页操作呢?

方法:

1 使用句柄,将当前窗口移动定位到列表页,接着进行翻页操作,详细请参考解决:使用selenium+python+webdriver采集不到当前页面html元素?

2 在采集完成后,在最新页关闭当前窗口或者直接使用```self.driver(列表页链接)```

思路:

1 首页

2 列表页

3 三级页面

4 四级页面

因为第三级页面详情存在页面加载,需要再次请求数据这样才能拿到数据

代码:

下面直接上关键代码

# 页面账号登录,关键词搜索步骤放在 __init__ 函数中,默认自动执行
def start_requests(self, *args):
        if self.num == 1:
            print('第一页')
        else:
            print('=====================请注意这里===========================')
            logging.info("开始翻页,第{0}次翻页".format(self.num))
            time.sleep(10)
        all = self.driver.window_handles # 显示当前页面一共有多少个句柄,结果是一个列['' ,'']
        z = self.driver.current_window_handle  # 当前页面的句柄
        self.driver.switch_to.window(self.driver.window_handles[1])  # 移动句柄
        time.sleep(2)
        page = self.driver.page_source
        res = etree.HTML(page)  # 是将HTML转化为二进制/html 格式
        post_list = res.xpath('//*[@id="jq_project_list"]//tr/td[2]/a[1]/@href')[:-1]
        for i, post in enumerate(post_list):
            url = ('https:' + str(post)).strip()
            print('--------------------------------')
            print(url)
            # 这里是请求三级页面链接
            self.driver.get(url)
            self.driver.switch_to.window(self.driver.window_handles[1])  # 移动句柄
            time.sleep(2)
            page = self.driver.page_source
            src = re.findall('iframe_content" src="(.*?)"', page)
            # 三级页面数据异步加载url 
            iframe_url = ("https://www.bidcenter.com.cn"+str(src[0])).replace('amp;', '')
            self.driver.get(iframe_url)
            self.driver.switch_to.window(self.driver.window_handles[1])  # 移动句柄
            time.sleep(2)
            page = self.driver.page_source
            # 此时详情数据可在page里面获取
            url = 'https://www.baidu.com/' # 无用链接
            request = Request(url, callback=self.parse, dont_filter=True)
            yield request
            if i == 39: # 对应上面for i , post...
                self.num += 1
                # 这里是列表页翻页链接 page为页码 
                url = "https://search.bidcenter.com.cn&page="+str(self.num)
                self.driver.get(url)
                request = Request(url, callback=self.start_requests)
                yield request

这样就可以进行遍历操作了。

完整代码可留言联系。

参考:https://blog.csdn.net/Owen_goodman/article/details/107669410

转载请注明转自:https://blog.csdn.net/Owen_goodman/article/details/107706730

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值