0

我正在尝试解析图书馆网站以从特定出版商处获取信息。这是网站的链接。

http://hollis.harvard.edu/?q=publisher:%22sonzogno%22+ex-Everything-7.0:%221700-1943%22+

到目前为止,通过使用漂亮的汤,我可以从这个页面获取我需要的数据。问题是我的脚本只从整个结果集中抓取了前 25 个条目(价值一页),而整个结果集中还有很多。

我在这里想念什么?

这是一小段代码。

def url_parse(name):

if(name == " "): print 'Invalid Error' else: response = urllib2.urlopen(name) html_doc = response.read() soup = BeautifulSoup(html_doc) print soup.title print soup.find_all("a",{"class":"classiclink"}) #print soup.find("a",{"class":"classiclink"}) aleph_li = [] # creates and emptylist aleph_li = soup.find_all("a",{"class":"classiclink"})

之后我打算使用这些标签中的可用信息。到目前为止,就像你说的,我只能抓住其中的 25 个。

我无法遍历每个页面,因为 url(包含某种查询)似乎没有任何页面信息。我不确定如何向服务器发出重复请求。

谢谢。

4

3 回答 3

1

也许这不会那么难:

如果查看获取其他页面的请求,即调用result.ashx,可以看到以下参数:

inlibrary:false
noext:false
debug:
lastquery:publisher:"sonzogno" ex-Everything-7.0:"1700-1943"
lsi:user
uilang:en
searchmode:assoc
hardsort:def
skin:harvard
rctx:AAMAAAABAAAAAwAAABJ/AAAHaGFydmFyZDJwdWJsaXNoZXI6InNvbnpvZ25vIiBleC1FdmVyeXRoaW5nLTcuMDoiMTcwMC0xOTQzIjJwdWJsaXNoZXI6InNvbnpvZ25vIiBleC1FdmVyeXRoaW5nLTcuMDoiMTcwMC0xOTQzIhJzb256b2dubyAxNzAwLTE5NDMAAAAAA25hdgR1c2VyAAAAA2RlZgpyZXN1bHRsaXN0BWFzc29jBQAAAAAAAAACZW4AAP////9AEAAAAAAAAAIAAAAGY19vdmVyATEEaV9mawAAAAAA
c_over:1
curpage:3
concept:sonzogno 1700-1943
branch:
ref:
i_fk:
mxdk:-1
q:publisher:"sonzogno" ex-Everything-7.0:"1700-1943"
si:user
cs:resultlist
cmd:nav

所以尝试curpage在你自己的请求中添加一个参数。您可能必须使用循环来遍历所有结果,但这似乎非常可行:

params = urllib.urlencode({"curpage": NUMBER})
urllib2.urlopen(YOUR_PAGE, params) 
于 2012-10-23T23:21:02.593 回答
0

HOLLIS在 Beta 中有一个JSON API 。其结果包括指向下一页的链接。这可能更容易使用。

于 2012-10-23T23:31:06.520 回答
0

您必须让 python 按顺序调用每个页面。知道您想要浏览所有页面还不够聪明。

如果您正在调用所有页面,则应该将所需的结果解析为某种形式的输出文件,可以是稍后可以通过 python 处理的 .pkl 文件,也可以是 .txt 文件(如果您认为这就是您所需要的)。如果您正在使用的数据集非常长,您可能会遇到内存溢出。

即使您还没有调用所有页面,将输出数据流式传输到 .pkl 文件以便在最后处理成可用形式也是明智之举。

于 2012-10-23T20:57:17.547 回答