1、场景

爬虫练手代码

2、代码

Python2:

  1. #!/usr/bin/python
  2. # -*- coding:utf-8 -*-
  3. import requests
  4. from lxml import etree
  5. import BeautifulSoup
  6. import sys
  7. reload(sys)
  8. sys.setdefaultencoding("utf-8")
  9. def getfromBaidu(word):
  10. list=[]
  11. headers = {
  12. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  13. 'Accept-Encoding': 'gzip, deflate, compress',
  14. 'Accept-Language': 'en-us;q=0.5,en;q=0.3',
  15. 'Cache-Control': 'max-age=0',
  16. 'Connection': 'keep-alive',
  17. 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'
  18. }
  19. baiduurl = 'http://www.baidu.com'
  20. url = 'http://www.baidu.com.cn/s?wd=' + word + '&cl=3'
  21. html = requests.get(url=url,headers=headers)
  22. path = etree.HTML(html.content)
  23. #用k来控制爬取的页码范围
  24. for k in range(1, 20):
  25. # 取出内容
  26. path = etree.HTML(requests.get(url, headers).content)
  27. flag = 11
  28. if k == 1:
  29. flag = 10
  30. for i in range(1, flag):
  31. # 获取标题
  32. sentence = ""
  33. for j in path.xpath('//*[@id="%d"]/h3/a//text()'%((k-1)*10+i)):
  34. sentence+=j
  35. print sentence # 打印标题
  36. # 获取真实URL
  37. try:
  38. url_href = path.xpath('//*[@id="%d"]/h3/a/@href'%((k-1)*10+i))
  39. url_href = ''.join(url_href)
  40. baidu_url = requests.get(url=url_href, headers=headers, allow_redirects=False)
  41. real_url = baidu_url.headers['Location'] # 得到网页原始地址
  42. print real_url # 打印URL
  43. except:
  44. print "error",sentence,url_href
  45. # 获取描述
  46. res_abstract = path.xpath('//*[@id="%d"]/div[@class="c-abstract"]'%((k-1)*10+i))
  47. if res_abstract:
  48. abstract = res_abstract[0].xpath('string(.)')
  49. else:
  50. res_abstract = path.xpath('//*[@id="%d"]/div/div[2]/div[@class="c-abstract"]' % ((k - 1) * 10 + i))
  51. if res_abstract:
  52. abstract = res_abstract[0].xpath('string(.)')
  53. print abstract # 打印描述
  54. url = baiduurl+path.xpath('//*[@id="page"]/a[%d]/@href'%flag)[0]
  55. return
  56. #主程序测试函数
  57. if __name__ == '__main__':
  58. print getfromBaidu('上网')

3、效果

获取搜索结果的真实URL、描述、标题的更多相关文章

  1. 获取百度搜索结果的真实url以及摘要和时间

    利用requests库和bs4实现,demo如下: #coding:utf- import requests from bs4 import BeautifulSoup import bs4 impo ...

  2. songtaste网站歌曲真实URL获取

    个人挺喜欢songtaste网站的歌曲的,下载方法也层出不穷,可是作为程序员如果不知其中原理的方法真是羞愧.首先简单点的方法当然有google插件这样的嗅探器了,不过这种工具的原理还不是很了解.今天先 ...

  3. Java 获取网络重定向文件的真实URL

    其实Java 使用HttpURLConnection下载的的时候,会自动下载重定向后的文件,但是我们无法获知目标文件的真实文件名,文件类型,用下面的方法可以得到真实的URL,下面是一个YOUKU视频的 ...

  4. 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  5. spring中获取当前项目的真实路径

    总结: 方法1: WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext ...

  6. Java获取请求客户端的真实IP地址

    整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...

  7. 使用CDN后配置nginx自定义日志获取访问用户的真实IP

    问题描述:         新上线了一个项目,架构如下(简单画的理解就好): 问题是:负载前面加上CDN后负载这里无法获取客户的真实访问IP,只能过去到CDN的IP地址: 问题解决: 修改nginx日 ...

  8. 用Head方法获得百度搜索结果的真实地址

    用Head方法获得百度搜索结果的真实地址 在百度中搜索"Java",第一条结果的链接为: https://www.baidu.com/link?url=HBOOMbhPKH4SfI ...

  9. 获取HTML中所有图片的 URL

    /// <summary> /// 获取HTML中所有图片的 URL /// </summary> /// <param name="strHtml" ...

随机推荐

  1. 多线程学习笔记-深入理解ThreadPoolExecutor

    java多线程中,线程池的最上层接口是Executor,ExecutorService实现了Executor,是真正的管理线程池的接口,ThreadPoolExecutor间接继承了ExecutorS ...

  2. maven 发布快照版本后的引用

    使用nexus发布快照版本后, 引用项目问题 必须 <scope>test</scope> 才能引用快照.releases 不受此限制

  3. Please check that your locale settings问题

    问题描述: perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: L ...

  4. Auto Layout - BNR

    继续UIImageView - BNR篇. 通过Homepwner TARGETS -> General -> Deployment Info -> Devices中的iPhone改 ...

  5. Golang常见误区(二)

    35. 关闭 HTTP 的响应体 使用 HTTP 标准库发起请求.获取响应时,即使你不从响应中读取任何数据或响应为空,都需要手动关闭响应体.新手很容易忘记手动关闭,或者写在了错误的位置: // 请求失 ...

  6. vuex学习总结

    vuex 学习 mapState,mapGetters 一般也写在 computed 中 , mapActions 一般写在 methods中.

  7. LODOP设置打印设计返回JS代码是变量

    前面有一篇博文是介绍JS模版的加载和赋值,赋值有两种,详细可查看本博客的那篇博文:LodopJS代码模版的加载和赋值简单来说,就是打印项的值是变量,在添加打印项前进行赋值:打印项的值是字符串,给打印项 ...

  8. ICPC中国南昌国家邀请赛和国际丝绸之路规划大赛预选赛 I J

    I. Max answer 链接:https://nanti.jisuanke.com/t/38228 思路: 枚举最小值,单调栈确定最小值的边界,用线段树+前缀和维护最小值的左右区间 实现代码: # ...

  9. Magento2.X 前端&综合 简要

    主题是Magento的应用程序,它提供了整个应用的前端部分: 主题旨在覆盖或自定义视图层资源,通过模块和库最初提供.主题由不同的供应商(前端开发人员)实施,并拟分配为类似于其他组件的Magento系统 ...

  10. FileSaver.js 文件下载

    安装: npm install file-saver --save 或者(需下载FileSaver.js文件) <script src="path/FileSaver.js" ...