Python-requests:无法从页面中抓取所有 html 代码
2016-04-04
1551
我正在尝试抓取 金融时报搜索 页面的内容。
使用 Requests ,我可以轻松 抓取 文章的标题和超链接。
我想获取下一页的超链接,但与文章的标题或超链接不同,我在 Requests 响应中找不到它。
from bs4 import BeautifulSoup
import requests
url = 'http://search.ft.com/search?q=SABMiller+PLC&t=all&rpp=100&fa=people%2Corganisations%2Cregions%2Csections%2Ctopics%2Ccategory%2Cbrand&s=-lastPublishDateTime&f=lastPublishDateTime[2000-01-01T00%3A00%3A00%2C2016-01-01T23%3A59%3A59]&curations=ARTICLES%2CBLOGS%2CVIDEOS%2CPODCASTS&highlight=true&p=1et'
response = requests.get(url, auth=(my login informations))
soup = BeautifulSoup(response.text, "lxml")
def get_titles_and_links():
titles = soup.find_all('a')
for ref in titles:
if ref.get('title') and ref.get('onclick'):
print ref.get('href')
print ref.get('title')
get_titles_and_links() 函数为我提供了所有文章的标题和链接。
但是,对下一页使用类似的函数,我没有得到任何结果:
def get_next_page():
next_page = soup.find_all("li", class_="page next")
return next_page
或者:
def get_next_page():
next_page = soup.find_all('li')
for ref in next_page:
if ref.get('page next'):
print ref.get('page next')
1个回答
如果您可以在页面源代码中看到所需的链接,但无法通过
requests
或
urllib
获取它们。这可能意味着两件事。
- 您的逻辑有问题。 我们假设不是那样。
- 那么剩下的就是: Ajax ,您要查找的页面部分是在 document.onload 方法触发后由 javascript 加载的。因此,您无法获得一开始就不存在的东西。
我的解决方案(更像是建议)是
-
对网络请求进行逆向工程。
很难,但普遍适用
。我个人就是这么做的。您可能想要使用
re
模块。 -
找到
呈现
javascript 的东西。也就是说,
模拟网页浏览
。您可能想要查看
selenium
、Qt
等的 webdriver 组件。 这比较简单,但有点占用内存,并且与 1 相比消耗更多的网络资源 。
C Panda
2016-04-04