易闻seo搜索引擎优化实验室(Google、Bing、Baidu、Yahoo的搜索结果还是利用的方法)

优采云 发布时间: 2021-10-26 00:28

  易闻seo搜索引擎优化实验室(Google、Bing、Baidu、Yahoo的搜索结果还是利用的方法)

  前段时间一直在研究如何使用python抓取搜索引擎结果。我在执行过程中遇到了很多问题。我记录了我遇到的所有问题。希望以后遇到同样问题的童鞋们不要走弯路。

  1. 搜索引擎选择

  选择一个好的搜索引擎意味着您可以获得更准确的搜索结果。我用过四个搜索引擎:谷歌、必应、百度、雅虎。作为程序员,我更喜欢谷歌。但是当我看到我最喜欢的谷歌给我回了一堆js代码时,却没有我想要的搜索结果。所以我转向了 Bing 营地。使用了一段时间,发现Bing返回的搜索结果对我的问题并不理想。就在我快要绝望的时候,谷歌救了我。原来,谷歌为了照顾那些被禁止在浏览器中使用js的用户,还有另一种搜索方式。请查看以下搜索网址:

  hl 指定要搜索的语言,q 是要搜索的关键字。好的,多亏了谷歌,搜索结果页收录了我想要抓取的内容。

  PS:网上很多方法还是用python来获取谷歌搜索结果。需要注意的是,Google 不再推荐此方法,请参阅。Google 现在提供自定义搜索 API,但该 API 每天最多只能处理 100 个请求。如果您需要更多,则只能购买。

  2. Python 抓取和分析网页,

  使用Python urllib2 抓取网页非常方便。话不多说,看代码:

  defsearch(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)

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

  既然我们可以用Python抓取网页并保存,那么我们就可以从源代码页中提取出我们想要的搜索结果了。Python提供了htmlparser模块,但是使用起来比较麻烦。这是一个非常有用的网络分析包 BeautifulSoup。BeautifulSoup的应用有详细的介绍。这里我就不多说了。

  使用上面的代码,对于少量的查询是可以的,但是如果你要执行几万次的查询,上面的方法就不再有效了,谷歌会检测你的请求的来源,如果我们用机器来频繁抓取Google 在搜索结果中,Google 很快就会屏蔽您的IP,并向您返回一个503 错误页面。这不是我们想要的结果,所以我们还要继续探索

  如前所述,使用 urllib2 我们可以设置 URL 请求的标头来伪装我们的用户代理。简而言之,用户代理是客户端浏览器等应用程序使用的特殊网络协议。每次浏览器(邮件客户端/搜索引擎蜘蛛)发出 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_0like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) \

Version/6.0Mobile/10A5355dSafari/8536.25', \

'Mozilla/5.0(Windows NT 6.1) AppleWebKit/537.36(KHTML, like Gecko) \

Chrome/28.0.1468.0Safari/537.36', \

'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)']

defsearch(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)

  不要被 user_agents 列表吓到,它实际上是 10 个用户代理字符串。这样做可以让我们假装更好。如果您需要更多用户代理,请在此处查看 UserAgentString。

  第17-19行表示随机选择一个用户代理字符串,然后使用request的add_header方法伪装一个用户代理。

  通过伪装用户代理,我们可以继续抓取搜索引擎结果。如果这不起作用,那么我建议在每两次查询之间随机睡眠一段时间。这会影响爬取速度,但它会让您更连续地爬取结果。, 如果有多个IP,爬取速度也会提高。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线