使用urllib2刮刮Biography.com

aa8*_*a8y 3 python urllib2 web-scraping python-2.7

所以我以前搞过网站,但这次我很难过.我试图在Biography.com上搜索一个人并检索他/她的传记.但每当我使用urllib2并查询网站搜索网站时:http://www.biography.com/search/我得到一个没有数据的空白页面.

当我通过单击View Source查看浏览器中生成的源时,我仍然看不到任何数据.当我使用Chrome的开发者工具时,我会找到一些数据,但仍然没有链接导致传记.

我曾尝试更改用户代理,添加引用,在Python中使用cookie但无济于事.如果有人可以帮助我完成这项任务,那将非常有帮助.

我打算将这个文本用于我的NLP项目,最坏的情况是,我必须手动复制粘贴文本.但我希望不会那样.

Ste*_*ude 5

Chrome/Chromium的开发者工具(或Firebug)绝对是您的朋友.我可以看到,Biography网站上的初始搜索是通过调用Google API来完成的,例如

https://www.googleapis.com/customsearch/v1?q=Barack%20Obama&key=AIzaSyCMGfdDaSfjqv5zYoS0mTJnOT3e9MURWkU&cx=011223861749738482324%3Aijiqp2ioyxw&num=8&callback=angular.callbacks._0

我使用的搜索词是q=查询字符串的一部分:q=Barack%20Obama.

这将返回JSON,其中有一个键link,其中包含感兴趣的文章URL的值.

"link": "http://www.biography.com/people/barack-obama-12782369"
Run Code Online (Sandbox Code Playgroud)

访问该页面向我显示这是由以下请求生成的:

http://api.saymedia-content.com/:apiproxy-anon/content-sites/cs01a33b78d5c5860e/content-customs/@published/@by-custom-type/ContentPerson/@by-slug/barack-obama-12782369

它返回包含HTML的JSON.

因此,将链接的最后部分替换为链接barack-obama-12782369中感兴趣的人的相关信息saymedia-content可能会取出您想要的内容.

实施:

  1. 您需要使用urllib2(或requests)通过他们的Google API调用进行搜索,使用urllib2.urlopen(url)requests.get(url).将Barack%20ObamaURL 替换为URL转义搜索字符串,例如Bill%20Clinton.
  2. 使用Python的json模块解析JSON 以提取为您提供http://www.biography.com/people链接的字符串.由此,提取该感兴趣链接的一部分(barack-obama-12782369如上所述).
  3. 使用urllib2requests执行saymedia-contentAPI请求替换barack-obama-12782369@by-slug/从2中提取的任何内容; 即urllib2.urlopen在此URL上执行另一个操作.
  4. 从第二个请求的响应中解析JSON以提取所需的内容.

(警告:这是因为这两个API调用中没有基于会话的字符串可能会过期.)

或者,您可以使用Selenium访问网站,进行搜索,然后提取内容.

  • [我已经实施了你的建议.它似乎工作](https://gist.github.com/zed/07b4b2f5b13507ac33af) (2认同)