使用tor和python来刮掉谷歌学者

kri*_*nan 10 python tor web-scraping google-scholar

我正在开展一个项目来分析如何引用期刊文章.我有一个大型的期刊文章名称文件.我打算将它们传递给Google学术搜索,并查看每个引用的引用次数.

这是我遵循的策略:

  1. 使用http://www.icir.org/christian/scholar.html上的 "scholar.py" .这是一个预先编写的python脚本,可以搜索谷歌学者并以CSV格式返回首次点击的信息(包括引用次数)

  2. 谷歌学者在一定数量的搜索后阻止你(我有大约3000个文章标题要查询).我发现,大多数人使用Tor(如何通过Tor的在Python?让urllib2的请求,并防止自定义Web爬虫被封锁)来解决这个问题.Tor是一种服务,每隔几分钟就会为您提供一个随机IP地址.

我有scholar.py和tor成功设置和工作.我不熟悉python或库urllib2,并想知道scholar.py需要进行哪些修改,以便查询通过Tor进行路由.

我也很乐意为大众谷歌学者查询提供一种更容易(并且可能有很大差异)的方法,如果存在的话.

提前致谢

Pau*_*ine 2

对我来说,使用 TOR 的最佳方法是设置像 polipo 这样的本地代理。我喜欢克隆存储库并在本地编译:

git clone https://github.com/jech/polipo.git
cd polipo
make all
make install
Run Code Online (Sandbox Code Playgroud)

但你可以使用你的包管理器(brew install polipo在 Mac 中,apt install polipo在 Ubuntu 上)。然后写一个简单的配置文件:

echo socksParentProxy=localhost:9050 > ~/.polipo
echo diskCacheRoot='""' >> ~/.polipo
echo disableLocalInterface=true >> ~/.polipo
Run Code Online (Sandbox Code Playgroud)

然后运行它:

polipo
Run Code Online (Sandbox Code Playgroud)

请参阅urllib 文档了解如何使用代理。与许多 UNIX 应用程序一样,urllib 将遵循环境变量http_proxy

export http_proxy="http://localhost:8123"
export https_proxy="http://localhost:8123"
Run Code Online (Sandbox Code Playgroud)

我喜欢使用 requests 库,这是一个更好的 urllib 包装器。如果您还没有:

pip install requests
Run Code Online (Sandbox Code Playgroud)

如果 urllib 使用 Tor,则以下一行应打印 True:

python -c "import requests; print('Congratulations' in requests.get('http://check.torproject.org/').text)"
Run Code Online (Sandbox Code Playgroud)

最后要注意的是:Tor 网络并不是在互联网上做傻事的免费通行证,因为即使使用它,您也不应该假设自己是完全匿名的。