【问题标题】:Why some elements of the response object are missing? Requests module为什么缺少响应对象的某些元素?请求模块
【发布时间】:2018-07-29 20:35:31
【问题描述】:

由于我最近开始学习网络抓取,我想我会尝试使用 requests 和 bs4 模块从 site 解析 HTML 表。

我知道我需要从tbody 访问td class——至少网页是这样的:

但是,当我尝试时,它似乎无法正常工作,因为它仅从 thead 捕获 td class 而不是从 tbody 捕获。因此,除了表格的标题之外,我无法捕获任何内容。

我认为它与 requests 模块有关。

url = 'https://vstup.edbo.gov.ua/statistics/requests-by-university/? 
qualification=1&education-base=40'
r = requests.get(url)
print(r.text)

结果如下(粘贴表相关部分):

<table id="stats">
    <caption></caption>
    <thead>
    <tr>
        <td class="region">Регіон</td>
        <td class="university">Назва закладу</td>
        <td class="speciality">Спеціальність (спеціалізація)</td>
        <td class="average-ball number" title="Середній конкурсний бал">СКБ</td>
        <td class="requests-total number">Усього заяв</td>
        <td class="requests-budget number">Заяв на бюджет</td>
            </tr>
    </thead>
    <tbody></tbody>
</table>

所以tbody 元素在我的响应对象中丢失,而它们出现在网页的代码中。我做错了什么?

【问题讨论】:

  • 当我查看该 URL 的来源时,我在表格正文中看不到任何内容。 Requests 准确地向您显示服务器正在发送的内容。
  • @holdenweb ,感谢您的回复。我提供了 url 代码截图的链接。好像不是空的
  • 从对源的不那么肤浅的检查看来,该页面已交付给客户端,其中该表由客户端脚本填充。如果确实如此,我发现提取内容的最简单方法是在 Python 控制下使用 Selenium 来访问显示的页面内容。

标签: python parsing beautifulsoup python-requests html-parsing


【解决方案1】:

@Holdenweb 建议尝试 Selenium,一切正常。

from selenium import webdriver 
from bs4 import BeautifulSoup

url = 'https://vstup.edbo.gov.ua/statistics/requests-by-university/? 
qualification=1&education-base=40'
browser = webdriver.Firefox(executable_path=r'D:/folder/geckodriver.exe')
browser.get(url)
html = browser.page_source

之后,我使用 BeautifulSoup 并设法解析网页。

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多