百度网页关键字抓取(大拿指点一二itemsitemsitems插件 )

优采云 发布时间: 2021-11-25 17:22

  百度网页关键字抓取(大拿指点一二itemsitemsitems插件

)

  我想通过爬虫获取百度搜索结果的原创链接。通过Firefox的HttpFox插件,发现搜索结果的URL被加密,例如:

  点击链接后,会向链接发送一个GET,来自服务器的响应收录真实的URL:

  

  我想通过一个python爬虫模拟这个过程:

  1.获取关键词,构建百度搜索URL(借助火狐自带的百度搜索,构建简化搜索链接)

  通过pyquery获取页面中所有的搜索结果网址:

  [(site.attr('href'), site.text().encode('utf-8')) for site in self.page('div.result.c-container h3. t a').items()]

  //不知道这里有没有用到items()方法。

  向加密后的URL发起GET请求,尝试获取HttpFox中获取的内容

  提取真实网址并显示

  目前可以获取到页面的加密URL(但是对于同一个URL,每次获取的加密URL是不同的,可以理解),但是步骤3中获取的页面不是httpfox中的,而是一个很复杂的页面(应该是跳转后的页面)。

  我尝试在requests.get()中设置参数allow_redirects=False,但是得到的响应不是httpfox的内容。

  想请教大家。 . . .

  代码如下:

  #!/usr/bin/python

#coding=utf-8

import re

import requests

from pyquery import PyQuery as Pq

class BaiduSearchSpider(object):

def __init__(self, searchText):

self.url = "http://www.baidu.com/baidu?wd=%s&tn=monline_4_dg" % searchText

self.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.5.17 (KHTML, like Gecko) Version/8.0.5 Safari/600.5.17"}

self._page = None

@property

def page(self):

if not self._page:

r = requests.get(self.url, headers=self.headers)

r.encoding = 'utf-8'

self._page = Pq(r.text)

return self._page

@property

def baiduURLs(self):

return [(site.attr('href'), site.text().encode('utf-8')) for site in self.page('div.result.c-container h3.t a').items()]

@property

def originalURLs(self):

tmpURLs = self.baiduURLs

print tmpURLs

originalURLs = []

for tmpurl in tmpURLs:

tmpPage = requests.get(tmpurl[0])

#tmpPage.encoding = 'utf-8' #这样不好使,print的时候python报错

tmptext = tmpPage.text.encode('utf-8')

urlMatch = re.search(r'URL=\'(.*?)\'', tmptext, re.S)

if not urlMatch == None:

print urlMatch.group(1), " ", tmpurl[1]

originalURLs.append(tmpurl)

else:

print "---------------"

print "No Original URL found!!"

print tmpurl[0]

print tmpurl[1]

return originalURLs

searchText = raw_input("搜索内容是:")

print searchText

bdsearch = BaiduSearchSpider(searchText)

originalurls = bdsearch.originalURLs

print '=======Original URLs========'

print originalurls

print '============================'

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线