在公司中需要去抓取一些数据,就遇到了以下这些问题:

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

http://www.baidu.com/link?url=w0Kz2y9t3Ne9YtTTkZ1M_ToY43HWy3tia4djxC8u9CC

点击链接之后,会向该链接发送GET,从服务器得到的回复中包含真实URL:http://www.python.org

想通过python爬虫模拟这个过程:
获取关键字,构造百度搜索URL(借助Firefox自带的百度搜索,构建简化的搜索链接)

  1. 通过pyquery获取页面中所有的搜索结果URL:
    [(site.attr('href'), site.text().encode('utf-8')) for site in self.page('div.result.c-container h3.t a').items()]
    //不知道这个items()方法在这里用的对不对

  2. 向加密后的URL发起GET请求,试图获得HttpFox中获取到的content

  3. 提取真实URL,进行显示

目前可以获取到页面加密后的URL(但是针对相同的一个网址每次获取的加密后URL都不同,可以理解),但是第3步获取到的页面,不是httpfox中的那个页面,而是很复杂的页面(应该是跳转之后到页面)。
尝试了requests.get()中设定参数allow_redirects=False,但是获取的回复也不是httpfox的那个content。

#!/usr/bin/python
#coding=utf-8import re
import requests
from pyquery import PyQuery as Pqclass BaiduSearchSpider(object):def __init__(self, searchText):self.url = "http://www.baidu.com/baidu?wd=%s&tn=monline_4_dg" % searchTextself.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@propertydef 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.baiduURLsprint tmpURLsoriginalURLs = []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 originalURLssearchText = raw_input("搜索内容是:")
print searchTextbdsearch = BaiduSearchSpider(searchText)
originalurls = bdsearch.originalURLs
print '=======Original URLs========'
print originalurls
print '============================'

通过pyquery的history属性,发现baidu这些连接大多进行了redirect(http 302),但是有一部分链接是直接获得了http200回复。对于从百度爬取的加密的url,进行requests.get()时不允许跳转(allow_redirects=False)。然后针对这两类服务器回复分别处理:
http 302跳转:从headers中的'location'可以获得原始url;
http 200回复:从content中通过正则表达式获取原始url
对上述代码中的def originalURLs(self)函数进行修改:

for tmpurl in tmpURLs:tmpPage = requests.get(tmpurl[0], allow_redirects=False)if tmpPage.status_code == 200:urlMatch = re.search(r'URL=\'(.*?)\'', tmpPage.text.encode('utf-8'), re.S)originalURLs.append((urlMatch.group(1), tmpurl[1]))elif tmpPage.status_code == 302:originalURLs.append((tmpPage.headers.get('location'), tmpurl[1]))else:print 'No URL found!!'

抓了几页,发现绝大部分url是通过302跳转的。不知道为什么httpfox上会看到好多是200OK状态的。

python如何获取百度搜索结果的真实URL相关推荐

  1. python模拟百度搜索点击链接_用 Python 获取百度搜索结果链接

    前言 近期有许多项目需要这个功能,由于Python实现起来比较简单就这么做了,代码贴下来觉得好点个赞吧~ 代码 # coding: utf-8 import os import time import ...

  2. python爬去百度搜索结果_python爬虫获取百度搜索结果的简单示例

    编程之家收集整理的这篇文章主要介绍了python爬虫获取百度搜索结果的简单示例,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. 感兴趣python爬虫获取百度搜索结果的简单示例的小伙伴, ...

  3. Python 爬虫 - 获取百度关键字搜索内容

    Python 爬虫 获取百度关键字搜索内容 https://www.cnblogs.com/w0000/p/bd_search_page.html Github headers内的参数,仅有UA时,返 ...

  4. python模拟百度搜索点击链接_python采集百度搜索结果带有特定URL的链接代码实例...

    这篇文章主要介绍了python采集百度搜索结果带有特定URL的链接代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 #coding utf-8 ...

  5. 从入门到入土:基于Python实现百度查询返回结果真实url读取及域名读取

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  6. python爬去百度搜索结果_python实现提取百度搜索结果的方法

    本文实例讲述了python实现提取百度搜索结果的方法.分享给大家供大家参考.具体实现方法如下: # coding=utf8 import urllib2 import string import ur ...

  7. python爬虫获取百度贴吧内容

    python爬虫获取百度贴吧内容 python爬虫获取百度贴吧内容 *声明:本文仅供学习交流使用,请勿用于商业用途,违者后果自负.* python爬虫获取百度贴吧内容 博主是一个比较懒的人,不会按时更 ...

  8. python爬取百度搜索_使用Python + requests爬取百度搜索页面

    想学一下怎样用python爬取百度搜索页面,因为是第一次接触爬虫,遇到一些问题,把解决过程与大家分享一下 1.使用requests爬取网页 首先爬取百度主页www.baidu.com import r ...

  9. php 百度来路关键词,php获取百度搜索关键词的方法[方法过时了]

    本来是想找一段通过js获取百度关键词的方法的,结果找并且测试获取到是可以就是只能获取到英文字符,如果是汉字就会乱码!知道可能是转码的问题,使用之前用过的代码也出现这样的问题!刚好看到php获取搜索关键 ...

最新文章

  1. Java 文件字符输入流FileReader读取txt文件乱码问题
  2. 区块链新一代监管框架 ---《STRISA 一种实施旅行规则的新架构》
  3. 高校二手交易代码_@21考研er:985高校捡漏指南!这些专业去年都没招满!!
  4. python 字节和字符串区别,Python中字节串和字符串,不是一个概念没有区别之分...
  5. XCTF-高手进阶区:bug
  6. apache camel_带有调试器的Apache Camel Eclipse工具
  7. 复数卷积 tensorflow_PyTorch 中的傅里叶卷积
  8. android java tga转png_java 里.tga图片怎么用啊,是不是要导入一个包,真的找不到资源,希望来位大神帮帮我 小弟在此拜谢!...
  9. 机器学习与计算机视觉(开篇)
  10. Knockout获取数组元素索引的2种方法,在MVC中实现
  11. 浅谈设备租赁管理系统的选型之路
  12. Linux下conda镜像源配置
  13. java 图片旋转裁剪_【Java实例】使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)...
  14. 计算机组成电路图符号大全,电路图|电路图讲解|电路图符号大全_极客迷
  15. 混合基金量化投资策略应该怎么制定?
  16. 数据库原理与应用学习笔记(一)
  17. 2012年8月 至 2014年2月1日读书列表
  18. adb 连接方式汇总
  19. eclipse运行java总显示上一个程序的运行结果(解决方案)
  20. 港科夜闻|全国政协副主席梁振英一行到访香港科技大学(广州)

热门文章

  1. php无法添加数据库,无法添加数据到数据库
  2. mysql 三表left join_mysql left join 3表查询问题
  3. wxpython使窗口重新显示_wxpython刷新窗口按按钮
  4. 技术人如何转型产品?
  5. ubuntu 下可以尝试还不错的屏幕截图工具: flameshot
  6. 删除git所有历史记录 仅保留当前文件
  7. 全网沸腾!鸿蒙手机要来了
  8. Soul回应赴美上市传闻:不是约会软件 没有确定的上市计划
  9. 罗永浩直播间12小时销售破2亿元 网友:《真还传》年内上映指日可待
  10. 《2020饿了么蓝骑士报告》:贫困县骑手月入5800元 成脱贫新兴力量