BeautifulSoup无法解析整个页面内容

时间:2014-09-26 20:33:29

标签: python web-scraping beautifulsoup

我试图从纽约时代得到一组网址(这是网页),但我得到了一个不同的答案,我确信我给了一个正确的类,虽然它提取了不同的类。我的ny_url.txt有“http://query.nytimes.com/search/sitesearch/?action=click&region=Masthead&pgtype=SectionFront&module=SearchSubmit&contentCollection=us&t=qry900#/isis; http://query.nytimes.com/search/sitesearch/?action=click&region=Masthead&pgtype=SectionFront&module=SearchSubmit&contentCollection=us&t=qry900#/isis/since1851/allresults/2/

这是我的代码:

import urllib2
import urllib
from cookielib import CookieJar
from bs4 import BeautifulSoup
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
text_file = open('ny_url.txt', 'r')
for line in text_file:
    print line
    soup = BeautifulSoup(opener.open(line))
    links = soup.find_all('div', attrs = {'class' :  'element2'})
    for href in links:
        print href

1 个答案:

答案 0 :(得分:1)

嗯,不是那么简单。

您要查找的数据不在urllib2下载的page_source中。

尝试打印opener.open(line).read(),您会发现数据丢失。

这是因为,该网站正在向http://query.nytimes.com/svc/cse/v2pp/sitesearch.json?query=isis&page=1

发出另一个GET请求

在您的查询参数传递query=isispage=1

的网址中

获取的数据是json格式,尝试手动打开浏览器中的上面的url。你会在那里找到你的数据。

所以纯粹的pythonic方式是调用这个url并解析JSON以获得你想要的东西。 不需要火箭科学 - 只需使用正确的密钥解析字典。

OR

更简单的方法是使用像Selenium这样的网络驱动程序 - 导航到页面 - 并使用BeautifulSoup解析页面源代码。这应该很容易获取整个内容。

希望有所帮助。如果您需要更多见解,请与我们联系。