带有 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