我是Web抓取的新手,刚刚开始使用BeautifulSoup。这是我的问题。
当您使用像“define:lucid”这样的搜索查询以这种方式查找Google中的单词时,在大多数情况下,显示含义和发音的面板会显示在首页。 (显示在嵌入图像的左侧)
[Google默认词典示例]
我想要自动搜集和收集的内容是意义的文本和存储发音的mp3数据的URL。手动使用Chrome Inspector,可以在“元素”部分轻松找到它们,例如,Inspector(显示在图像的右侧)显示了URL,其中存储了“lucid”({{的发音的mp3数据)。 3}})。
但是,使用请求获取搜索结果的HTML内容并使用BeautifulSoup解析它,如下面的代码,soup
只获得面板中的一些内容,如IPA“/ luːsɪd/“和属性”形容词“类似于下面的结果,并且我找不到任何内容,例如音频元素中的内容。
如果可能的话,如何使用BeautifulSoup获取信息,否则哪些替代工具适合此任务?
P.S。我认为Google字典的发音质量优于其他任何字典网站的发音质量。所以我想坚持下去。
代码:
import requests
from bs4 import BeautifulSoup
query = "define:lucid"
goog_search = "https://www.google.co.uk/search?q=" + query
r = requests.get(goog_search)
soup = BeautifulSoup(r.text, "html.parser")
print(soup.prettify())
soup
内容的一部分:
</span>
<span style="font:smaller 'Doulos SIL','Gentum','TITUS Cyberbit Basic','Junicode','Aborigonal Serif','Arial Unicode MS','Lucida Sans Unicode','Chrysanthi Unicode';padding-left:15px">
/ˈluːsɪd/
</span>
</div>
</h3>
<table style="font-size:14px;width:100%">
<tr>
<td>
<div style="color:#666;padding:5px 0">
adjective
</div>
答案 0 :(得分:2)
您运行的基本请求不会返回通过JavaScript呈现的页面部分。如果您在Chrome中右键单击并选择查看页面源,则不存在音频链接。解决方案:您可以通过selenium
呈现页面。使用下面的代码,我得到包含链接的<audio>
标记。
您必须pip install selenium
,下载ChromeDriver并将包含该文件夹的文件夹添加到PATH
,如export PATH=$PATH:~/downloads/
import requests
from bs4 import BeautifulSoup
import time
from selenium import webdriver
def render_page(url):
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)
r = driver.page_source
#driver.quit()
return r
query = "define:lucid"
goog_search = "https://www.google.co.uk/search?q=" + query
r = render_page(goog_search)
soup = BeautifulSoup(r, "html.parser")
print(soup.prettify())
答案 1 :(得分:1)
因此,如果您需要刮取音频文件,您可以执行以下操作:
{{1}}
至于其他元素,我担心你只需要在汤中找到“定义”这个词,并刮掉包含它的标签的内容。