从各种搜索引擎中提取链接、标题和描述的模块。支持google、bing、yandex等。

CountryGoogleScraper的Python项目详细描述


#谷歌刮板-专业刮板搜索引擎

**在过去的几个月里,我根本没有在googlescraper上工作。原因是我对这个项目总体上不满意。这是一个非常复杂的项目,有很多依赖关系和陷阱,新用户可能会遇到这些问题。

最重要的是,*我对它的用例从来都不满意。*我的最初目标是让整个互联网都可以搜索,让像我这样的普通人可以独立访问互联网再次提供信息。但这永远不会通过搜索引擎来实现。这是完全错误的方法。搜索引擎不能代表Internet,也不能对您隐藏信息。



因为googlescraper有其生存的理由:获取有关搜索引擎如何看待互联网的信息。尤其是在**搜索引擎优化和营销**方面。出于这个原因,我将继续维持这个项目。但话说回来:googlescraper永远不会支持**大规模数据收集**。如果你想知道哪些服务器运行drupal或wordpress,你就错了。如果你想知道所有服务器的html正文中有一个特定的字符串,你也错了。这会导致我们……



好吧,我的儿子,我正在努力。就说我需要在接下来的几周里学会生锈。或许我会用C。但锈看起来很干净。现在是时候学习一些关于计算机网络和真正的抓取索引和抓取的概念了……

看[这里了解如何使用异步模式](http://scrapeulous.com/googlescraper-260-keywords-in-a-second.html)。



[安装](安装)
2.[快速启动](快速)
3.[异步模式](异步)
4.[关于](关于)
5.[与python一起使用](用法)
6.[命令行用法(读这个!)](cli用法)
7.[联系人](联系人)



<;a name="install"\>;
\installation

googlescraper是用python 3编写的。您至少应该安装Python3.4。最后一个主要的发展都是用蟒蛇3.5完成的。例如,当使用
ubuntu 15.10和python3.5时,请安装:

`````
sudo apt get install python3.5-dev
````

例如,在ubuntu 14.04上,
你当然必须安装chrome驱动程序。


来自github的消息:

有时候芝士店里没有最新最棒的东西(这就是他们所谓的
https://pypi.python.org/pypi/pip)。因此,您可能希望从github存储库中的最新源安装googlescraper。您可以这样做:

```
virtualenv--python python3 env
source env/bin/activate
pip install git+git://github.com/nikolait/googlescraper/
````

请注意,某些功能和示例可能无法按预期工作。我也不能保证
应用程序还能运行。我只保证(至少在一定程度上)从pip安装会产生一个可用版本。


d.uci.edu/~gohlke/pythonlibs/lxml

然后将下载的文件复制到python根目录中:c:\ python34\scripts\
然后从该目录下,在命令shell中发出命令:```pip install wheel_file.whl```
当然文件在下载时具有名称。

梅德里弗从这里下载最新的chromedriver:https://sites.google.com/a/chromium.org/chromedriver/downloads
然后复制C:\ python34\目录中的**chromedriver.exe**。

然后返回C:\ python34\scripts\并发出命令:```pip install googlescraper```

就这样。

<;a name="quick"/>;
quick start

如上所述安装。

在Selenium模式下,keywords.txt中的所有关键字(在真正的浏览器中):
````
googlescraper-m Selenium--keyword file keywords.txt-v2
````

>在搜索引擎中使用10个线程擦掉
+keywords.txt
+在http模式下的所有关键字e、bing和yahoo将输出存储在一个json文件中-v2
```

在一些搜索引擎上对关键字"k2 mountain"进行图像搜索:

```
googlescraper-s"必应、百度、雅虎、谷歌、Yandex"-q"k2 mountain"-t image-v2
````

玩得开心点:d

<;a name="async"/>;

这可能是googlescraper最棒的功能。如果

+搜索引擎没有阻止你(bing在请求**100个关键字/秒**时没有阻止我)
+你有足够的代理

异步模式示例:

words.txt**在Bing和Yahoo上。默认情况下,异步模式
同时产生100个请求。这意味着每秒大约有100个请求(取决于实际连接…。

```
googlescraper-s"bing,yahoo"--关键字文件keywords.txt-m http async-v3
````


<;a name="about"/>;


googlescraper可以轻松、快速地解析谷歌搜索引擎结果(以及许多其他搜索引擎)。它允许您以编程方式提取所有找到的
链接及其标题和描述,从而使您能够进一步处理擦掉的数据。


有无限的*使用场景*:

+快速获取大量[google呆子][1]。
+将其用作搜索引擎优化工具。
+发现趋势s.
+编译站点列表以提供您自己的数据库。
+更多的用例…
+非常容易扩展,因为代码有很好的文档记录

首先,您需要了解googlescraper使用**两种完全不同的刮削方法**:
+低级别刮削l http库,如"urllib.request"或"requests"模块。这模拟了真实浏览器发送的http数据包。
+通过使用selenium框架控制真实浏览器进行刮取

它采用以下技术/软件实现:


+用python 3.4编写
+使用多线程/异步io。(两种可能的方法,目前只实现了多线程)
+支持并行google抓取多个ip地址。
+使用[socksipy][2]和内置浏览器代理提供代理支持:
*socks5
*socks4
*httpproxy
+支持可选的像新闻/图像/视频搜索这样的搜索模式。支持哪些搜索引擎?
目前支持以下搜索引擎:
+google
+bing
+yahoo
+yandex
+baidu
+duckduckgo

glescraper最大化每个IP地址提取的信息量?

抓取是一个非常关键和复杂的主题。谷歌和其他搜索引擎巨头有一个强烈的倾向
使刮削生活尽可能困难。搜索引擎提供商有几种方法可以检测到机器人正在使用其搜索引擎:

+用户代理不是浏览器。
+搜索参数与用户设置使用的浏览器不同:
*javascript动态生成挑战客户方的盟友。这可能包括尝试检测人类行为的启发式方法。示例:只有人类移动鼠标并将鼠标悬停在感兴趣的搜索结果上。
+机器人有一个严格的请求模式(非常快的请求,在发送的数据包之间没有随机时间)。
+大量使用呆子
+不加载图片/广告/css/javascript(就像浏览器一样通常情况下,它不会触发某些javascript事件,因此要解决的最大障碍是javascript检测算法。我不知道google在他们的javascript中做了什么,但我很快会进一步调查,然后决定是否改变策略,并切换到一种**方法,这种方法可以通过在类似浏览器的环境中模拟浏览器**来执行javascript。每一个虚拟浏览器的网络都是代理和操作的,因此它的行为就像一个真正的物理用户代理。我非常确定,必须能够以并行方式处理20个这样的浏览器会话,而不会对资源造成太大压力。真正的问题仍然是缺少好的代理……



如上所述,使用"urllib.request"或"requests"模块和自己进行网络连接时有几个缺点:

Chrome有大约800万行代码,Firefox甚至有10个loc。大型公司投入大量资金推动技术进步(HTML5、CSS3、新标准),每个浏览器都有独特的行为。因此,用http请求手动模拟这样的浏览器几乎是不可能的。这意味着谷歌有很多方法来检测浏览使用中的异常和不一致。仅凭javascript的动态特性,就不可能在未被发现的情况下进行清理。

最好的办法是控制chrome浏览器,因为google对限制其本地浏览器功能的动机最小。
因此我需要一种方法,用python自动化chrome,并用不同的代理集控制几个独立的实例。然后,结果的输出与使用的代理数成线性增长……

一些有趣的技术/软件可以做到这一点:
+[硒](https://pypi.python.org/pypi/selenium)
+[机械化](http://wwwsearch.sourceforge.net/mechanize/)

<;a name="usage"\>;
##示例用法
在这里,您可以学习如何在自己的python脚本中使用googlescrape。

`` python
/usr/bin/python3
如何使用googlescraper非常基本的用法参见config.cfg文件中可能的值,
'搜索引擎':'yandex',
'关键字的页数':1
},
'硒':{
'选择浏览器':'chrome',
},
'全局al':{
"执行缓存":"false"
}
}


(scraperSearch).all():
用于搜索中的SERP。SERP:
打印(SERP)
用于SERP中的链接。链接:
打印(链接)



image_search():
target_directory='images/'

有关可能的值,请参见config.cfg文件中的
config={
'scraping':{
'keyword':'美丽的风景',:d祝您玩得开心,我亲爱的朋友们
'搜索引擎':'yandex,google,bing,baidu,yahoo',不支持duckduckgo
'搜索类型:'image',
'scrapedmethod':'selenium'
}
}


尝试:
sqlalchemy_session=scrape_with_config(config)
,除了googlesearcherror as e:
print(e)


图像URL=[]
search=sqlalchemy\u session.query(scraperSearch).all()[-1]


serp.serps:
图像URL.extend(
[link.link for link in serp.links]


print('[i]将抓取{num}图像并将其保存在"{dir}"中.format(
num=len(image_url),
dir=target_directory



import threading、requests、os、urllib


class fetchresource(threading.thread):
"获取web资源并将其存储在目标目录中"
def_u in it目标,url):
super()。\uuu init_uu()
self.target=target
self.urls=urls

def run(self):
对于self中的url。url:
url=urllib.parse.unquote(url)
打开(os.path.join(self.target,url.split('/')[-1],'wb')为f:
尝试:
content=requests.get(url).content
f.write(content)
除了e:
pass
print('[+]fetched{}.form在(url))

range(num_threads)]

而image_url:t in threads:
尝试:
t.urls.append(image_urls.pop())
索引器错误除外,例如e:
break

threads=[t for t in threads if t.urls]

t in threads:
t.start()



t线程的t线程:
>t.join()






























>用法用法:{[bas{[bas{[基本;图像]''>





用法用法用法用法用法用法用法:'用法用法:'{用法:{}[bas}[basic.format(sys.argv[0])
如果len(sys.argv)!=2:
打印(用法)
其他:
arg=sys.argv[1]
如果arg='基本':
基本用法()
elif arg='图像':
图像搜索()
其他:
打印(用法)
````
<;a name="cli usage"\>;
##直接使用命令行

使用googlescraper的最好方法可能是从命令行中使用它并发出如下命令:
```
googlescraper--关键字文件/tmp/关键字--搜索引擎bing--关键字3的num pages--scrape方法selenium
此处*sel*将刮削模式标记为"selenium"。这意味着googlescraper.py可以用真正的浏览器进行搜索。这是相当强大的,因为
你可以刮长和许多网站(谷歌有一个很难阻止真正的浏览器)。标记"--keyword file"的参数必须是一个关键字由
新行分隔的文件。所以:谷歌每查询一行。很简单,不是吗?

此外,选项`--num pages for keyword`意味着googlescraper将为每个关键字获取3个连续的页面。


示例关键字文件:
```
keyword no one
如何成为一个好的说唱歌手
inurl:"index.php?sl=43"
文件类型:.cfg
allintext:"您的"
标题:"admin config"
亚特兰大最好的妓院"中有一个mysql错误
```

刮除之后,您将自动在同一目录中名为"google撸scraper.db"的名为"google撸scraper.db"中有一个新的sqlite3数据库。您可以使用以下命令打开并检查数据库:
```
googlescraper--shell
````

2小时内删除10000个关键字应该不会有问题。如果你真的很疯狂,在配置中设置最大浏览器的值要高一点(在脚本文件的顶部)。

作为参数,您需要传递一个包含代理的文件,其格式如下:

```
protocol proxyhost:proxyport username:password
(…)
`````
示例:
`````
socks5 127.0.0.1:1080 blablabla:12345
socks4 77.66.55.44:9999 elite:js@fkva3(va3)
``



e要在*http*模式下使用googlescraper.py(这意味着发送原始http头),请按如下方式使用:

````
googlescraper-m http-p 1-n 25-q"白光"
```
<;a n a me="contact"\>;
IL。你可以在我的[博客][3]上找到我的联系信息。

[1]:http://www.webvivant.com/google-hacking.html"google dorks"
[2]:https://code.google.com/p/socksipy-branch/"socksipy branch"
[3]:http://incolumitas.com/about/contact/"contact with author"
[4]:http://incolumitas.com/2013/01/06/google search-a-rapid-python-class-to-get-search-results/
[5]:http://incolumitas.com/2014/11/12/scraping-and-extracting-links-from-any-major-search-engine-like-google-yandex-baidu-bing-and-duckduckgo/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何显示因用户而异的SQLite存储数据?   转换java。sql。将映射传递给Jackon的valueToTree方法时StringNode的时间戳   从java中的列表json获取值   unicode Java字符存储在什么编码中?   java如何让Spring数据存储库中的默认方法命中缓存?   java使用readClassDescriptor()和resolveClass()来允许序列化版本控制   数组通过另一个矩阵的一部分填充矩阵   如果包含使用正则表达式的字符串,则替换父XML标记的java   java清除SharedReference中的单个变量   java将变量值从一个jsp页面传输到另一个jsp页面   java JDBC+SQLite:DriveManager不加载所需的驱动程序   相同源代码的java Kotlin构建生成不同的二进制文件   Java中的元组枚举