带有 BeautifulSoup 的 Python Requests/Selenium 每次都没有返回 find_all

Posted

技术标签:

【中文标题】带有 BeautifulSoup 的 Python Requests/Selenium 每次都没有返回 find_all【英文标题】:Python Requests/Selenium with BeautifulSoup not returning find_all every time 【发布时间】:2017-05-01 11:40:23 【问题描述】:

我正在尝试抓取 Airbnb,我有工作代码,但似乎他们已经更新了页面上的所有内容。它间歇性地返回正确的输出,然后有时会失败?它将随机返回第 3 页和第 17 页之间的 NoneType 错误。有没有办法让它继续尝试或者我的代码不正确?

for page in range(1,pages + 1):
        #get page urls
        page_url= url + '&page=0'.format(page)
        print(page_url)


        #get page
        # browser.get(page_url)
        source = requests.get(page_url)
        soup = BeautifulSoup(source.text,'html.parser')

        #get all listings on page 
        div = soup.find('div','class':'row listing-cards-row')



        #loop through to get all info needed from cards
        for pic in div.find_all('div','class':'listing-card-wrapper'):
                  print(...)

最后一个 for 循环是我的错误开始发生的地方。这有时也会发生在我的其他功能中,有时它有时会起作用,有时却不起作用。我也已经尝试过 lxml 解析器了。

【问题讨论】:

我想找到一个解决方案,因为请求要快得多,但我求助于使用 selenium,现在一切似乎都运行正常。慢慢地……但正确地。 我注意到即使使用 selenium 也很奇怪的一件事是,每次我更改代码时,它都会在第一次出现与 requests 模块相同的错误时失败,但之后它可以完美运行。跨度> 您收到的错误是什么?您应该检查 page_url 是否被正确接收,例如:source.raise_for_status(),然后再继续做汤。 Christos,我收到 find_all 的非类型错误。但是我在翻了几次汤之后终于发现,源代码标签大约每 2 次请求获取页面就会改变。这似乎是我的问题,因为我现在可以完美地使用请求和 Selenium。感谢您的回复! 【参考方案1】:

在查看了几次汤后,我注意到程序每运行几次源代码标签就会发生变化。我抛出了一些异常,它似乎解决了我的“无”问题。

【讨论】:

以上是关于带有 BeautifulSoup 的 Python Requests/Selenium 每次都没有返回 find_all的主要内容,如果未能解决你的问题,请参考以下文章

python/beautifulsoup 查找所有带有特定锚文本的 <a href>

在 python BeautifulSoup 上获取带有特定前缀的超链接

在 python 上使用 selenium 或 beautifulsoup 从带有链接的页面中抓取数据,没有类,没有 id

带有 BeautifulSoup 的 Python Requests/Selenium 每次都没有返回 find_all

带有“加载更多”分页的列表的 BeautifulSoup 子页面

Python爬虫教程-24-数据提取-BeautifulSoup4