【发布时间】: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