用XPath来做一个简单的爬虫,尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。

  1. # -*- coding:utf-8 -*-
  2.  
  3. import urllib
  4. import urllib2
  5. from lxml import etree
  6.  
  7. def loadPage(url):
  8. """
  9. 作用:根据url发送请求,获取服务器响应文件
  10. url: 需要爬取的url地址
  11. """
  12. #print url
  13. #headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}
  14.  
  15. request = urllib2.Request(url)
  16. html = urllib2.urlopen(request).read()
  17. # 解析HTML文档为HTML DOM模型
  18. content = etree.HTML(html)
  19. #print content
  20. # 返回所有匹配成功的列表集合
  21. link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
  22.  
  23. #link_list = content.xpath('//a[@class="j_th_tit"]/@href')
  24. for link in link_list:
  25. fulllink = "http://tieba.baidu.com" + link
  26. # 组合为每个帖子的链接
  27. #print link
  28. loadImage(fulllink)
  29.  
  30. # 取出每个帖子里的每个图片连接
  31. def loadImage(link):
  32. headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
  33. request = urllib2.Request(link, headers = headers)
  34. html = urllib2.urlopen(request).read()
  35. # 解析
  36. content = etree.HTML(html)
  37. # 取出帖子里每层层主发送的图片连接集合
  38. #link_list = content.xpath('//img[@class="BDE_Image"]/@src')
  39. # link_list = content.xpath('//div[@class="post_bubble_middle"]')
  40. link_list = content.xpath('//img[@class="BDE_Image"]/@src')
  41. # 取出每个图片的连接
  42. for link in link_list:
  43. # print link
  44. writeImage(link)
  45.  
  46. def writeImage(link):
  47. """
  48. 作用:将html内容写入到本地
  49. link:图片连接
  50. """
  51. #print "正在保存 " + filename
  52. headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
  53. # 文件写入
  54. request = urllib2.Request(link, headers = headers)
  55. # 图片原始数据
  56. image = urllib2.urlopen(request).read()
  57. # 取出连接后10位做为文件名
  58. filename = link[-10:]
  59. # 写入到本地磁盘文件内
  60. with open(filename, "wb") as f:
  61. f.write(image)
  62. print "已经成功下载 "+ filename
  63.  
  64. def tiebaSpider(url, beginPage, endPage):
  65. """
  66. 作用:贴吧爬虫调度器,负责组合处理每个页面的url
  67. url : 贴吧url的前部分
  68. beginPage : 起始页
  69. endPage : 结束页
  70. """
  71. for page in range(beginPage, endPage + 1):
  72. pn = (page - 1) * 50
  73. #filename = "第" + str(page) + "页.html"
  74. fullurl = url + "&pn=" + str(pn)
  75. #print fullurl
  76. loadPage(fullurl)
  77. #print html
  78.  
  79. print "谢谢使用"
  80.  
  81. if __name__ == "__main__":
  82. kw = raw_input("请输入需要爬取的贴吧名:")
  83. beginPage = int(raw_input("请输入起始页:"))
  84. endPage = int(raw_input("请输入结束页:"))
  85.  
  86. url = "http://tieba.baidu.com/f?"
  87. key = urllib.urlencode({"kw": kw})
  88. fullurl = url + key
  89. tiebaSpider(fullurl, beginPage, endPage)

效果:

python爬虫案例:使用XPath爬网页图片的更多相关文章

  1. Python 爬虫之 Beautifulsoup4,爬网站图片

    安装: pip3 install beautifulsoup4 pip install beautifulsoup4 Beautifulsoup4 解析器使用 lxml,原因为,解析速度快,容错能力强 ...

  2. 【Python爬虫案例学习】下载某图片网站的所有图集

    前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. 基本环境配置 python 版本:2.7 ...

  3. Python爬虫:为什么你爬取不到网页数据

    前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...

  4. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  5. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  6. Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  7. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  8. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  9. python爬虫学习01--电子书爬取

    python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...

随机推荐

  1. sublime text3常用的一些快捷键

    --------------------------------下面的内容可以打印出来贴在电脑旁提醒自己-------------------- Ctrl + Shift + D  快速复制当前的一行 ...

  2. [AWS][GUI][VNC]rhel 7 安装GUI ,配置VNC

    预计阅读时间:15分钟 预计配置时间:30分钟  (前提是已经申请AWS的EC2的rhel7 云主机并且成功运行) 目前AWS 亚马逊云免费试用一年,申请一个学习使用 痛点:没有GUI,无法搭建Jen ...

  3. HTML&CSS基础-html标签的实体

    HTML&CSS基础-html标签的实体 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML源代码 <!DOCTYPE html> <html&g ...

  4. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  5. win10下无法安装loadrunner,提示“管理员已阻止你运行此应用”

    如下图: 1.再次进入控制面板,并且选择用户账户后把最下面的[更改用户账户控制设置],里面有个滑条,把滑条拉到最下面的[从不通知]上面并且确定. 2.按[Win+R]快捷键打开运行,输入 gpedit ...

  6. jpa之No property buyerOpenId found for type OrderMaster! Did you mean 'buyerOpenid'?

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...

  7. 通过iptables限制docker容器端口

    如何限制docker暴露的对外访问端口 docker 会在iptables上加上自己的转发规则,如果直接在input链上限制端口是没有效果的.这就需要限制docker的转发链上的DOCKER表. # ...

  8. 韩顺平老师java视频全套-java视频教程下载

    解压压缩包会有一个种子文件.直接迅雷下载即可,包含了韩顺平老师的java入门视频,jdbc,jsp,servlet,oracle,hibermate,spring,SHH框架,struct,linux ...

  9. lis框架各种方法的使用

    //这个必须是lpedorapp表的主键才行LPEdorAppDB tLPEdorAppDB = new LPEdorAppDB();tLPEdorAppDB.setEdorAcceptNo(mEdo ...

  10. 题解 UVa11752

    题目大意 输出所有小于 \(2^{64}-1\) 的正整数 \(n\), 使得 \(\exists p, q, a, b\in \mathbb{N+}, p\neq q\rightarrow a^p= ...