问题:
在使用自动化工具采集三级甚至四级页面时,因为需要遍历采集信息,当我们采集完第四级页面后,如何返回列表页进行翻页操作呢?
方法:
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