【问题标题】:Python BeautifulSoup returns a different webpage than the one I seePython BeautifulSoup 返回的网页与我看到的网页不同
【发布时间】:2019-08-06 00:37:44
【问题描述】:

我对网络抓取或 python 都很陌生,所以如果这是一个愚蠢的问题,请提前道歉。

url=https://infoweb.newsbank.com/apps/news/results?sort=YMD_date%3AD&p=AWNB&t=&maxresults=20&f=advanced&b=results&val-base-0=January%201%2C%202005&fld-base-0=YMD_date&bln-base-1=and&val-base-1=drone%2C%20unmanned%20aerial%20vehicle%2C%20UAV&fld-base-1=alltext
page = requests.get(url, allow_redirects=True)
allcont = BeautifulSoup(page.text, 'html.parser')
allcont.find_all('div',class_="search-hits__meta--total_hits")

当我在浏览器中输入 url 时,我被定向到 AccessWorldNews 网站上搜索结果为 2005 年 1 月 1 日的关键字“drone”的页面。我感兴趣的元素是返回的结果数——在本例中为 2,可以通过 `'div',class_="search-hits__meta--total_hits"' 隔离。

但是,beautifulsoup 找到我的网页内容与我在浏览器中看到的完全不同。查看文本,它似乎是一个中间网页,用户在其中输入用户名和密码,但有趣的是在我看来,我不必输入任何用户名和密码来访问上面的那个 url。

我很想了解如何告诉 beautifulsoup 转到与我将 url 放入浏览器时看到的页面相同的页面。非常感谢任何帮助!

【问题讨论】:

  • 您可以随时尝试selenium。该模块使您可以直观地看到程序也在看到什么。文档位于selenium-python.readthedocs.io
  • 您已经登录到该网站,因此您不必通过登录页面。但是你的脚本还没有登录,所以它被重定向到那里。
  • 您需要将所有 cookie 发送到 requests.get()
  • 由于您已经熟悉 requests,您可能更喜欢 requests_html 作为 selenium 的替代方案来呈现 Javascript。它有一个很好的 API 并与请求集成,因此您不必更改很多现有代码。

标签: python beautifulsoup screen-scraping


【解决方案1】:

您提供的 URL 会为任何外部访问者加载用户登录页面。所以 BeautifulSoup (BS) 也会为您提供该页面的 html。要获取登录后找到的搜索结果,您需要先登录该页面,然后在该页面中使用BS解析器。但是BS不支持登录。相反,使用 selenium 做浏览器自动化,通过 selenium 执行登录,并获取登录页面的 html。参考 selenium 中的 get_attribute()。

【讨论】:

  • 非常感谢!这真的很有帮助。我真的很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 2018-04-25
  • 2014-06-20
  • 1970-01-01
相关资源
最近更新 更多