我写了一些代码试图从网站上提取照片。我想让它找到照片,然后下载它们用于推特:
import urllib2
from lxml.html import fromstring
import sys
import time
url = "http://www.phillyhistory.org/PhotoArchive/Search.aspx"
response = urllib2.urlopen(url)
html = response.read()
dom = fromstring(html)
sels = dom.xpath('//*[(@id = "large_media")]')
for pic in sels[:1]:
output = open("file01.jpg","w")
output.write(pic.read())
output.close()
#twapi = tweepy.API(auth)
#twapi.update_with_media(imagefilename, status=xxx)
我在这方面是个新手,所以我不太清楚为什么这不起作用。未创建文件,也未创建“sels”。在
您的问题是图像搜索(
Search.aspx
)不仅仅返回一个包含所有内容的HTML页面,而是交付一个JavaScript应用程序,该应用程序随后发出几个请求(请参见AJAX)来获取有关资产的原始信息,然后动态构建包含所有搜索结果的HTML页面。在您可以通过查看浏览器在加载页面时发出的HTTP请求来观察这种行为。使用Firefox的Firebug extension或内置的Chrome developer tools并打开网络选项卡。查找在初始页面加载之后发生的请求,尤其是POST请求。在
在本例中,有趣的请求是
Thumbnails.ashx
,Details.ashx
,最后是MediaStream.ashx
。一旦确定了这些请求,就可以查看浏览器发送的头和表单数据,并用Python的纯HTTP请求来模拟这种行为。在来自
Thumbnails.ashx
的响应实际上是JSON,因此它比HTML更容易解析。在在这个例子中,我使用^{} 模块,因为它比
urllib(2)
好得多,也更容易使用。如果没有,请使用pip install requests
安装它。在试试这个:
注意:我没有检查http://www.phillyhistory.org/的服务条款对自动爬网有何规定。你需要检查自己,确保你做的任何事都没有违反他们的规定。在
相关问题 更多 >
编程相关推荐