我下面有一个简单的脚本,可以很好地从Google学术搜索中检索感兴趣的文章中获取文章列表。
import urllib
import urllib2
import requests
from bs4 import BeautifulSoup
SEARCH_SCHOLAR_HOST = "https://scholar.google.com"
SEARCH_SCHOLAR_URL = "/scholar"
def searchScholar(searchStr, limit=10):
"""Search Google Scholar for articles and publications containing terms of interest"""
url = SEARCH_SCHOLAR_HOST + SEARCH_SCHOLAR_URL + "?q=" + urllib.quote_plus(searchStr) + "&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search"
content = requests.get(url, verify=False).text
page = BeautifulSoup(content, 'lxml')
results = {}
count = 0
for entry in page.find_all("h3", attrs={"class": "gs_rt"}):
if count < limit:
try:
text = entry.a.text.encode("ascii", "ignore")
url = entry.a['href']
results[url] = text
count += 1
except:
pass
return results
queryStr = "Albert einstein"
pubs = searchScholar(queryStr, 10)
if len(pubs) == 0:
print "No articles found"
else:
for pub in pubs.keys():
print pub + ' ' + pubs[pub]
但是,我希望将此脚本作为CGI应用程序在远程服务器上运行,而无需访问控制台,因此无法安装任何外部Python模块。 (我只是通过将bs4目录复制到我的cgi-bin目录中而无需借助pip或easy_install来“安装” BeautifulSoup,但由于其依赖性很大,此技巧不适用于请求。)
因此,我的问题是:是否可以使用内置的urllib2或httplib Python模块,而不是获取Google Scholar页面的请求,然后将其传递给BeautifulSoup?应该是因为我找到了一些代码here,它仅使用标准库和BeautifulSoup刮掉了Google Scholar,但它却相当复杂。我宁愿实现一个更简单的解决方案,只是调整我的脚本以使用标准库而不是请求。
有人可以给我一些帮助吗?
答案 0 :(得分:1)
此代码足以使用urllib2执行简单的请求:
def get(url):
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/2.0 (compatible; MSIE 5.5; Windows NT)')
return urllib2.urlopen(req).read()
如果您将来需要做更高级的事情,它将包含更多代码。该请求的作用是简化了标准库的用法。