Rumah pembangunan bahagian belakang Tutorial Python python抓取google搜索结果

python抓取google搜索结果

Oct 18, 2016 am 10:46 AM

前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童鞋不要再走弯路。

1. 搜索引擎的选取

  选择一个好的搜索引擎意味着你能够得到更准确的搜索结果。我用过的搜索引擎有四种:Google、Bing、Baidu、Yahoo!。 作为程序员,我首选Google。但当我看见我最爱的Google返回给我的全是一堆的js代码,根本没我想要的搜索结果。于是我转而投向了Bing的阵营,在用过一段时间后我发现Bing返回的搜索结果对于我的问题来说不太理想。正当我要绝望时,Google拯救了我。原来Google为了照顾那些禁止浏览器使用js的用户,还有另外一种搜索方式,请看下面的搜索URL:

https://www.google.com.hk/search?hl=en&q=hello

  hl指定要搜索的语言,q就是你要搜索的关键字。 好了,感谢Google,搜索结果页面包含我要抓取的内容。

  PS: 网上很多利用python抓取Google搜索结果还是利用 https://ajax.googleapis.com/ajax/services/search/web... 的方法。需要注意的是这个方法Google已经不再推荐使用了,见 https://developers.google.com/web-search/docs/ 。Google现在提供了Custom Search API, 不过API限制每天100次请求,如果需要更多则只能花钱买。

2. Python抓取并分析网页

  利用Python抓取网页很方便,不多说,见代码:

def search(self, queryStr):
     queryStr = urllib2.quote(queryStr)
     url = 'https://www.google.com.hk/search?hl=en&q=%s' % queryStr
     request = urllib2.Request(url)
     response = urllib2.urlopen(request)
     html = response.read()
     results = self.extractSearchResults(html)
Salin selepas log masuk

  第6行的 html 就是我们抓取的搜索结果页面源码。使用过Python的同学会发现,Python同时提供了urllib 和 urllib2两个模块,都是和URL请求相关的模块,不过提供了不同的功能,urllib只可以接收URL,而urllib2可以接受一个Request类的实例来设置URL请求的headers,这意味着你可以伪装你的user agent 等(下面会用到)。

  现在我们已经可以用Python抓取网页并保存下来,接下来我们就可以从源码页面中抽取我们想要的搜索结果。Python提供了htmlparser模块,不过用起来相对比较麻烦,这里推荐一个很好用的网页分析包BeautifulSoup,关于BeautifulSoup的用法官网有详细的介绍,这里我不再多说。

  利用上面的代码,对于少量的查询还比较OK,但如果要进行上千上万次的查询,上面的方法就不再有效了, Google会检测你请求的来源,如果我们利用机器频繁爬取Google的搜索结果,不多久就Google会block你的IP,并给你返回503 Error页面。这不是我们想要的结果,于是我们还要继续探索

  前面提到利用urllib2我们可以设置URL请求的headers, 伪装我们的user agent。简单的说,user agent就是客户端浏览器等应用程序使用的一种特殊的网络协议, 在每次浏览器(邮件客户端/搜索引擎蜘蛛)进行 HTTP 请求时发送到服务器,服务器就知道了用户是使用什么浏览器(邮件客户端/搜索引擎蜘蛛)来访问的。 有时候为了达到一些目的,我们不得不去善意的欺骗服务器告诉它我不是在用机器访问你。

  于是,我们的代码就成了下面这个样子:

user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \
         'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \
         'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ \
         (KHTML, like Gecko) Element Browser 5.0', \
         'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \
         'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \
         'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \
         'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) \
         Version/6.0 Mobile/10A5355d Safari/8536.25', \
         'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) \
         Chrome/28.0.1468.0 Safari/537.36', \
         'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']
 def search(self, queryStr):
     queryStr = urllib2.quote(queryStr)
     url = 'https://www.google.com.hk/search?hl=en&q=%s' % queryStr
     request = urllib2.Request(url)
     index = random.randint(0, 9)
     user_agent = user_agents[index]
     request.add_header('User-agent', user_agent)
     response = urllib2.urlopen(request)
     html = response.read()
     results = self.extractSearchResults(html)
Salin selepas log masuk

 不要被user_agents那个list吓到,那其实就是10个user agent 字符串,这么做是让我们伪装的更好一些,如果你需要更多的user agent 请看这里 UserAgentString。

17-19行表示随机选择一个user agent 字符串,然后用request 的add_header方法伪装一个user agent。

  通过伪装user agent能够让我们持续抓取搜索引擎结果,如果这样还不行,那我建议在每两次查询间随机休眠一段时间,这样会影响抓取速度,但是能够让你更持续的抓取结果,如果你有多个IP,那抓取的速度也就上来了。


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Mar 10, 2025 pm 06:54 PM

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Mar 10, 2025 pm 06:52 PM

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python? Bagaimana untuk membuat antara muka baris arahan (CLI) dengan python? Mar 10, 2025 pm 06:48 PM

Artikel ini membimbing pemaju Python mengenai bangunan baris baris komando (CLI). Butirannya menggunakan perpustakaan seperti Typer, Klik, dan ArgParse, menekankan pengendalian input/output, dan mempromosikan corak reka bentuk mesra pengguna untuk kebolehgunaan CLI yang lebih baik.

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka? Apakah beberapa perpustakaan Python yang popular dan kegunaan mereka? Mar 21, 2025 pm 06:46 PM

Artikel ini membincangkan perpustakaan Python yang popular seperti Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask, dan Permintaan, memperincikan kegunaan mereka dalam pengkomputeran saintifik, analisis data, visualisasi, pembelajaran mesin, pembangunan web, dan h

Terangkan tujuan persekitaran maya di Python. Terangkan tujuan persekitaran maya di Python. Mar 19, 2025 pm 02:27 PM

Artikel ini membincangkan peranan persekitaran maya di Python, memberi tumpuan kepada menguruskan kebergantungan projek dan mengelakkan konflik. Ia memperincikan penciptaan, pengaktifan, dan faedah mereka dalam meningkatkan pengurusan projek dan mengurangkan isu pergantungan.

Apakah ungkapan biasa? Apakah ungkapan biasa? Mar 20, 2025 pm 06:25 PM

Ekspresi biasa adalah alat yang berkuasa untuk memadankan corak dan manipulasi teks dalam pengaturcaraan, meningkatkan kecekapan dalam pemprosesan teks merentasi pelbagai aplikasi.

See all articles