首页 > 解决方案 > 使用 BS4 的 Web 抓取返回不正确的 html 内容

问题描述

我试图通过从 Yocket 中抓取数据来找到一些关于被特定大学录取的学生的 GPA、GRE 和工作经验的统计数据。虽然我的代码在第一页上正常工作(https://yocket.in/applications-admits-rejects/588-new-york-university/2),但是当我尝试抓取后面的页面时单击导航栏下方(https://yocket.in/applications-admits-rejects/588-new-york-university/2?page=2),代码不起作用。经过分析,我发现为后面的页面收到的 HTML 内容是不正确的,即收到的 html 内容对应于其他页面。此外,接收到的内容对于 page=3、page=4 等不正确。爬取的内容仅对 page=1 是正确的。此 URL 适用于 NYU,但是在 page=2 上接收到的不正确内容的这种行为对于所有其他大学的 URL 都是相同的但是,我只想要承认的状态。因此,需要找到一种方法来浏览第 2 页中的不同页面。Url 将是 /2?page= 部分。

这是我的代码:

import requests
from bs4 import BeautifulSoup
page_num=2
url="https://yocket.in/applications-admits-rejects/588-new-york-university/2?page=" + str(page_num) 
page = requests.get(url)
soup=BeautifulSoup(page.content)
print(soup.prettify())

标签: python-3.xbeautifulsoupweb-crawler

解决方案


它发出警告,因为没有明确定义解析器,只需将features = "lxml"传递给 BeautifulSoup 构造函数,它将解决问题。

import requests
from bs4 import BeautifulSoup
page_num=2
url="https://yocket.in/applications-admits-rejects/588-new-york-university/2?page=" + str(page_num) 
page = requests.get(url)
soup=BeautifulSoup(page.content,features = "lxml")
print(soup.prettify())

希望有帮助!


推荐阅读