最重要的问题不是重定向是页面使用javascript修改内容,但urllib2
没有JS
引擎它只是GETS
数据,如果您在浏览器上禁用javascript,您会注意到它加载的内容与urllib2
返回的内容基本相同
import urllib2
from BeautifulSoup import BeautifulSoup
bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
soup = BeautifulSoup(bostonPage)
open('test.html', 'w').write(soup.read())
test.html
并在浏览器中禁用 JS,在 firefox 内容中最简单 -> 取消选中启用 javascript,生成相同的结果集。
那么我们能做的很好,首先我们应该检查网站是否提供API,报废往往会皱眉
http://www.tripadvisor.com/help/what_type_of_tripadvisor_content_is_available
旅行/酒店 API?
看起来他们可能会,尽管有一些限制。
但是如果我们仍然需要用JS来抓取它,那么我们可以使用selenium
http://seleniumhq.org/它主要用于测试,但它很容易并且有相当好的文档。
我还发现这个启用了 Javascript 的抓取网站?和这个http://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/
希望有帮助。
作为旁注:
>>> import urllib2
>>> from bs4 import BeautifulSoup
>>>
>>> bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
>>> value = bostonPage.read()
>>> soup = BeautifulSoup(value)
>>> open('test.html', 'w').write(value)