BeautifulSoup不会返回页面

时间:2017-09-08 10:05:21

标签: python google-chrome web-scraping beautifulsoup

我是Web抓取的新手,刚刚开始使用BeautifulSoup。这是我的问题。

当您使用像“define:lucid”这样的搜索查询以这种方式查找Google中的单词时,在大多数情况下,显示含义和发音的面板会显示在首页。 (显示在嵌入图像的左侧)

[Google默认词典示例]

enter image description here

我想要自动搜集和收集的内容是意义的文本和存储发音的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>

2 个答案:

答案 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)

我检查了一下。你是对的,在BeautifulSoup输出中由于某种原因没有音频元素。但是,在检查了代码之后,我找到了Google正在使用的音频文件的来源,http://ssl.gstatic.com/dictionary/static/sounds/oxford/lucid--_gb_1.mp3,如果用其他任何单词替换“lucid”,它就完美无缺。

因此,如果您需要刮取音频文件,您可以执行以下操作:

{{1}}

至于其他元素,我担心你只需要在汤中找到“定义”这个词,并刮掉包含它的标签的内容。