Jiy*_*ssa 11 python web-scraping google-news
我正在为不同的新闻媒体创建一个网络刮板,对于Nytimes和Guardian来说,它很容易,因为它们有自己的API.
现在,我想从这份报纸GulfTimes.com中获取结果.他们没有在他们的网站上提供高级搜索,所以我使用谷歌新闻.但是,Google新闻Api已被弃用.我想要的是从高级搜索中检索结果的数量,如关键字="埃及"和begin_date ="10/02/2011"和end_date ="10/05/2011".
这在Google新闻用户界面中是可行的,只需将源代码设置为"海湾时代"以及相应的查询和日期,并简单地手动计算结果数量,但当我尝试使用python执行此操作时,我得到403错误,这是可以理解的.
我对如何做到这一点有任何想法吗?或者除谷歌新闻之外还有其他服务可以让我这样做吗?请记住,我会一次发出近500个请求.
import json
import urllib2
import cookielib
import re
from bs4 import BeautifulSoup
def run():
Query = "Egypt"
Month = "3"
FromDay = "2"
ToDay = "4"
Year = "13"
url='https://www.google.com/search?pz=1&cf=all&ned=us&hl=en&tbm=nws&gl=us&as_q='+Query+'&as_occt=any&as_drrb=b&as_mindate='+Month+'%2F'+FromDay+'%2F'+Year+'&as_maxdate='+Month+'%2F'+ToDay+'%2F'+Year+'&tbs=cdr%3A1%2Ccd_min%3A3%2F1%2F13%2Ccd_max%3A3%2F2%2F13&as_nsrc=Gulf%20Times&authuser=0'
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
request = urllib2.Request(url)
response = opener.open(request)
htmlFile = BeautifulSoup(response)
print htmlFile
run()
Run Code Online (Sandbox Code Playgroud)
ale*_*cxe 16
您可以使用awesome 请求库:
import requests
URL = 'https://www.google.com/search?pz=1&cf=all&ned=us&hl=en&tbm=nws&gl=us&as_q={query}&as_occt=any&as_drrb=b&as_mindate={month}%2F%{from_day}%2F{year}&as_maxdate={month}%2F{to_day}%2F{year}&tbs=cdr%3A1%2Ccd_min%3A3%2F1%2F13%2Ccd_max%3A3%2F2%2F13&as_nsrc=Gulf%20Times&authuser=0'
def run(**params):
response = requests.get(URL.format(**params))
print response.content, response.status_code
run(query="Egypt", month=3, from_day=2, to_day=2, year=13)
Run Code Online (Sandbox Code Playgroud)
你会得到status_code = 200.
顺便说一句,看看scrapy项目.没有什么能比这个工具更简单.