【问题标题】:Web Scraping with BeautifulSoup by class returns empty list使用 BeautifulSoup 按类进行 Web Scraping 返回空列表
【发布时间】:2020-01-09 22:53:12
【问题描述】:

我正在尝试使用 BeautifulSoup 提取其中的锚标记(截图附在下面),但是在只有锚标记工作时得到空列表。

我阅读了 BeautifulSoup 文档并尝试了 select() 方法和 find_all() 方法,但仍然给出了空列表。

>>> import requests, webbrowser, bs4
>>> res = requests.get('https://www.google.com/search?q=beautiful+soup')
>>> soup = bs4.BeautifulSoup(res.text, 'html.parser')
>>> elems = soup.select('.r a')
>>> len(elems)
0
>>> elems = soup.select('a')
>>> len(elems)
68
>>> elems = soup.select('.r')
>>> len(elems)
0
>>> soup.find_all('a', class_='r')
[]
>>> soup.select('[class~=r]')
[]
>>> soup.find_all('a', class_='r')
[]
>>> soup.find_all('a', _class='r')
[]
>>> soup.find_all('a', {'class_':'r'})
[]
>>> soup.find_all('a', {'_class':'r'})
[]

Div with as class r

【问题讨论】:

  • 这个问题已经被问过很多次了。您是否在 SO 上尝试过一些以前的解决方案?
  • 为什么在课前使用_?你试过了吗:soup.find_all('a', {'class':'r'}) ?
  • @ASTEFANI 在课前使用 _,正如我在一个答案中读到的,在课堂前使用 _,问题得到解决。但是这个文档link 说在课后使用 _ 。正如您所建议的,仅使用过的类仍然列表为空。正如 Dev Khadka 下面所说,看起来 Google 阻止了报废。我在其他网站上进行了测试并且工作正常。
  • @QHarr 是的,检查了答案,但仍然是同样的问题。但这里的问题似乎是谷歌阻止了报废。我的代码与其他网站一起使用。

标签: python-3.x beautifulsoup


【解决方案1】:

看起来 google.com 随机生成类名,可能是为了阻止 scraping。您的代码可以在其他网站上运行

import requests, webbrowser, bs4
res = requests.get('https://html.com')
soup = bs4.BeautifulSoup(res.text, 'html.parser')
elems = soup.select('.post-single p')
len(elems)


【讨论】:

    猜你喜欢
    • 2021-01-25
    • 2020-10-30
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多