使用美丽汤进行网页抓取不起作用



最终,我将打开新闻网站的所有文章,然后列出所有文章中使用的前10个单词。为了做到这一点,我首先想看看有多少文章,这样我就可以在某个时候对它们进行迭代,但我还没有真正弄清楚我想如何做每件事。

为此,我想使用BeautifulSoup4。我想我想要得到的类是Javascript,因为我没有得到任何东西。这是我的代码:

url = "http://ad.nl"
ad = requests.get(url)
soup = BeautifulSoup(ad.text.lower(), "xml")
titels = soup.findAll("article")
print(titels)
for titel in titels:
print(titel)

物品名称有时是h2或h3。它总是有一节课,但我在那节课上什么都学不懂。它有一些父级,但使用相同的名称,但使用了例如扩展包装器。我甚至不知道如何使用父类来获得我想要的东西,但我认为这些类也是Javascript。还有一个href我很感兴趣。但再一次,它可能也是Javascript,因为它什么都不返回。

有人知道我如何使用BeautifulSoup来使用任何东西(最好是href,但文章名称也可以(吗?

如果您不想使用硒。这对我有用。我试过两台不同网络连接的电脑。你能试试吗?

from bs4 import BeautifulSoup
import requests
cookies={"pwv":"2",
"pws":"functional|analytics|content_recommendation|targeted_advertising|social_media"}
page=requests.get("https://www.ad.nl/",cookies=cookies)
soup = BeautifulSoup(page.content, 'html.parser')
articles = soup.findAll("article")

然后按照kimbo的代码提取h2/h3。

正如@Sri在评论中提到的那样,当您打开该url时,会出现一个页面,您必须首先接受cookie,这需要交互。当你需要互动时,可以考虑使用硒之类的东西(https://selenium-python.readthedocs.io/)。

下面是一些应该让你开始的东西。

(编辑:在运行下面的代码之前,您需要运行pip install selenium(

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
url = 'https://ad.nl'
# launch firefox with your url above
# note that you could change this to some other webdriver (e.g. Chrome)
driver = webdriver.Firefox()
driver.get(url)
# click the "accept cookies" button
btn = driver.find_element_by_name('action')
btn.click()
# grab the html. It'll wait here until the page is finished loading
html = driver.page_source
# parse the html soup
soup = BeautifulSoup(html.lower(), "html.parser")
articles = soup.findAll("article")
for article in articles:
# check for article titles in both h2 and h3 elems
h2_titles = article.findAll('h2', {'class': 'ankeiler__title'})
h3_titles = article.findAll('h3', {'class': 'ankeiler__title'})
for t in h2_titles:
# first I was doing print(t.text), but some of them had leading
# newlines and things like '22:30', which I assume was the hour of the day
text = ''.join(t.findAll(text=True, recursive=False)).lstrip()
print(text)
for t in h3_titles:
text = ''.join(t.findAll(text=True, recursive=False)).lstrip()
print(text)
# close the browser
driver.close()

这可能正是你想要的,也可能不是,但这只是如何使用硒和美味汤的一个例子。请随意复制/使用/修改您认为合适的内容。如果你想知道该使用什么选择器,请阅读@JL Peyret的评论。

相关内容

  • 没有找到相关文章

最新更新