zoukankan      html  css  js  c++  java
  • 爬虫过程中遇到的错误总结一

    1、 场景:爬取的是一个具有多个公告的网站,检索出来的信息以js渲染出来的数据,多个分页的场景。
    首先用selenium获取了第一页的信息,之后对第一页的多个标题进去爬取数据,爬取每个分页,在第一页
    所有信息界面爬取结束后,进行翻页爬取,如此到最后一页。

    stale element reference:element is not attached to the page document问题:
    

    这个错误是在遍历第一页的分页时候,当从第一个标题明细进去之后返回报的错误,需要对当前的driver对象进行重新定位
    解决。解决过程中我增加了对当前页面的显示等待功能。具体代码如下,加入显示等待是为了更加符合逻辑吧,可能不加也
    可以照常运行,这个里面最关键的就是重新定位。

                # 解析元素 element_a是获取的每一页的所有的element集合
                element_a = self.driver.find_elements(By.XPATH, '//div[@class="title"]/a[@class="fontlan"]')
                for i in range(len(element_a)):
                    element_a = self.driver.find_elements(By.XPATH, '//div[@class="title"]/a[@class="fontlan"]') # 重新定位获取一下(比较关键)
                    # 进入了子页面
                    if element_a[i].get_attribute('href'):
                        print('child pages   ~~~~~~~~~~~~~', type(element_a[i].get_attribute('href')), element_a[i].get_attribute('href'))
                        self.driver.get(element_a[i].get_attribute('href'))
                        wait1 = WebDriverWait(self.driver, 10)
                        wait1.until(EC.presence_of_all_elements_located((By.XPATH, '//p')))
                        child_element_title = self.driver.find_element(By.XPATH, '//h1/span')
                        child_element_content = self.driver.find_element(By.XPATH, '//p')
                        title = child_element_title.get_attribute('text')
                        content = child_element_content.get_attribute('text')
                        # print(title, content)
                        # 都不为空时候创建
                        if title and content:
                            with open('./motfiles/' + str(title) + '.txt', 'a+', encoding='utf-8') as f:
                                f.write('\n'.join(content))
                        self.driver.back()
                        # 每一页都让变为可点击的,最长等待时间为10s
                        wait = WebDriverWait(self.driver, 10)  # 显示最长等待时间10s如出来就直接走,没有出来报异常
                        wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(),'下一页')]")))
    

    2、之后遇到在来加。。。

  • 相关阅读:
    SQL 语言入门
    [转载]Sql Server 中的Login,Schema,User,Role之间的关系
    稀疏矩阵运算
    特征缩放的几种方法
    dp解出栈序列数
    神经网络解决多分类问题例:数字识别
    多分类例题
    fminunc 函数的用法
    二分类
    特征归一化、特征映射、正则化
  • 原文地址:https://www.cnblogs.com/hbym/p/15700937.html
Copyright © 2011-2022 走看看