aa8*_*a8y 3 python urllib2 web-scraping python-2.7
所以我以前搞过网站,但这次我很难过.我试图在Biography.com上搜索一个人并检索他/她的传记.但每当我使用urllib2并查询网站搜索网站时:http://www.biography.com/search/我得到一个没有数据的空白页面.
当我通过单击View Source查看浏览器中生成的源时,我仍然看不到任何数据.当我使用Chrome的开发者工具时,我会找到一些数据,但仍然没有链接导致传记.
我曾尝试更改用户代理,添加引用,在Python中使用cookie但无济于事.如果有人可以帮助我完成这项任务,那将非常有帮助.
我打算将这个文本用于我的NLP项目,最坏的情况是,我必须手动复制粘贴文本.但我希望不会那样.
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可能会取出您想要的内容.
实施:
urllib2(或requests)通过他们的Google API调用进行搜索,使用urllib2.urlopen(url)或requests.get(url).将Barack%20ObamaURL 替换为URL转义搜索字符串,例如Bill%20Clinton.json模块解析JSON 以提取为您提供http://www.biography.com/people链接的字符串.由此,提取该感兴趣链接的一部分(barack-obama-12782369如上所述).urllib2或requests执行saymedia-contentAPI请求替换barack-obama-12782369后@by-slug/从2中提取的任何内容; 即urllib2.urlopen在此URL上执行另一个操作.(警告:这是因为这两个API调用中没有基于会话的字符串可能会过期.)
或者,您可以使用Selenium访问网站,进行搜索,然后提取内容.