我试图从下面的网站中摘录新闻声明和演讲。
我的问题和这个问题很相似。寻找抓取网站的正确元素
from bs4 import BeautifulSoup
from selenium import webdriver
base_url = 'https://www.ecb.europa.eu'
urls = [
f'{base_url}/press/pr/html/index.en.html',
f'{base_url}/press/govcdec/html/index.en.html'
]
driver = webdriver.Chrome()
for url in urls:
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
for anchor in soup.select('span.doc-title > a[href]'):
driver.get(f'{base_url}{anchor["href"]}')
article_soup = BeautifulSoup(driver.page_source, 'html.parser')
title = article_soup.select_one('h1.ecb-pressContentTitle').text
date = article_soup.select_one('p.ecb-publicationDate').text
paragraphs = article_soup.select('div.ecb-pressContent > article > p:not([class])')
content = 'nn'.join(p.text for p in paragraphs)
print(f'title: {title}')
print(f'date: {date}')
print(f'content: {content[0:80]}...')
然而,我试着运行它,没有得到任何输出。我在HTML方面的经验很少。特别是,我不明白这是什么部分在循环。与CSS有关的东西
for anchor in soup.select('span.doc-title > a[href]'):
所以我怀疑它不再工作了,因为最近欧洲央行网页的布局发生了变化。我猜html引用是改变了,但我不知道确切的
谢谢你的帮助。
我可以知道你到底需要什么答案吗?可以使用.find_all()查找特定标记、类或id的所有元素。标签:在字符串中键入标签的名称类:类型class_="TheNameOfClass"Id:类型Id ="NameOFID">
希望这有帮助。如果你对此有疑问,一定要问其他问题。
我需要以下内容
<div class="title"> <h1>Unconventional fiscal and monetary (...) </h1>
<h2 class="ecb-pressContentSubtitle">Keynote speech by Isabel Schnabel, (...)”</h2>
<p class="ecb-publicationDate">Frankfurt am Main, 26 February 2021</p>
<p>One of the greatest conundrums (...)
所以我的输出看起来像
标题:非常规财政货币政策(…)副标题:Isabel Schnabel的主题演讲,(…)
日期:2019年12月20日
内容:最大的难题之一(…)
哦,好的,首先你会在driver = webdriver.Chrome()
中得到一个错误。在括号内,你应该粘贴安装的web驱动程序的确切路径。如果你没有一个chrome浏览器驱动程序按照下面给出的说明。现在,如果你在那里指定了webdriver的路径,并且不想泄漏给其他人,Ok,这很好。
下一步,你可以用硒本身来刮元素,而不是用漂亮的汤。使用driver.find_element_by_class_name("")
并键入要搜索的类名。在本例中,它将是"title"。接下来要获取h1的文本。我不完全知道如何在硒中找到孩子,你可以搜索并使用命令来获得h1的代码。将其存储在一个变量中,您可以像这样打印它的文本print(h1.text)
。注意:搜索如何从selenium中获取标签的子元素,然后使用任何网站中提到的命令,然后使用。text
指令:
- 检查chrome版本
- 访问此网站https://sites.google.com/a/chromium.org/chromedriver/downloads
- 点击与chrome版本匹配的链接。
- 下载适合你电脑的版本
- 解压缩文件,得到路径并粘贴到
webdriver.Chrome()
。
这一切。如果我的回答不让你满意,请一定要问,因为我不是硒方面的专家。我也是个学徒。
我已经安装了webdriver,所以这不是问题。现在我基本上只是删除了第二个循环并纠正了元素,它工作了:)
date = article_soup.select_one('p.ecb-publicationDate').text
title = article_soup.select_one('title').text
subtitle = article_soup.select_one('h2.ecb-pressContentSubtitle').text
paragraphs = article_soup.select('div.section > p:not([class])')
content = 'nn'.join(p.text for p in paragraphs)
#print(date)
#print(title)
#print(subtitle)
#print(content)