通过xpath分析页面,爬取页面中的图片:

  1. #_*_ coding: utf-8 _*_
  2.  
  3. '''
  4. Created on 2018年7月15日
  5. @author: sss
  6. function: 使用xpath还处理爬取的数据
  7.  
  8. '''
  9. from lxml import etree
  10. import urllib
  11. from pip._vendor.distlib.compat import raw_input
  12. from asyncio.tasks import sleep
  13.  
  14. class Spider:
  15. def __init__(self):
  16. self.tiebaName = raw_input('请输入需要爬去的贴吧的名字')
  17. self.beginPage = int(raw_input('其输入起始页'))
  18. self.endPage = int(raw_input('请输入终止页'))
  19.  
  20. self.url = 'http://tieba.baidu.com/f'
  21. self.ua_header = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;'}
  22.  
  23. #图片编号
  24. self.userName = 1
  25.  
  26. #计算爬取页
  27. def tiebaSpider(self):
  28. for page in range(self.beginPage, self.endPage + 1):
  29. pn = (page - 1) * 50 #url中的page number
  30. word = {'pn': pn, 'kw': self.tiebaName}
  31.  
  32. word = urllib.parse.urlencode(word ) #转化为url编码格式
  33. myUrl = self.url + '?' + word
  34.  
  35. #调用页面处理函数load_Page
  36. #并获取页面的所有帖子链接
  37. links = self.loadPage(myUrl)
  38.  
  39. #开始抓取每个首页所有楼主发帖的标贴连接
  40. def loadPage(self, url ):
  41. req = urllib.request.Request(url, headers=self.ua_header)
  42. html = urllib.request.urlopen(req).read()
  43.  
  44. #解析html为html文档
  45. selector = etree.HTML(html)
  46.  
  47. #抓取当前页面的所有帖子的url的后部分,也就是帖子的编号
  48. # http://tieba.baidu.com/p/4884069807里的 “p/4884069807”
  49. links = selector.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href')
  50.  
  51. #links类型为etreeElementString列表
  52. #遍历列表,并且合并成一个帖子地址,调用图片处理函数LoadImage
  53. for link in links:
  54. link = 'http://tieba.baidu.com' + link
  55. self.loadImages(link )
  56.  
  57. #抓取每个首页中对应的每个楼主的发布详细页面
  58. def loadImages(self, link ):
  59. req = urllib.request.Request(link, headers= self.ua_header)
  60. html = urllib.request.urlopen(req).read()
  61.  
  62. selector = etree.HTML(html)
  63.  
  64. #获取这个帖子里的所有图片的src路径
  65. imagesLinks = selector.xpath('//img[@class="BDE_Image"]/@src')
  66.  
  67. #获取图片路径,下载保存
  68. for imagesLink in imagesLinks:
  69. self.writeImages(imagesLink)
  70.  
  71. print('完成所有下载!')
  72.  
  73. #保存页面中的图片
  74. def writeImages(self, imagesLink):
  75. """
  76. 将Images里的二进制内容存入到userNname文件中
  77. """
  78. print(imagesLink)
  79.  
  80. #通过图片连接获取图片内容:
  81. images = urllib.request.urlopen(imagesLink).read()
  82.  
  83. print('正在存储文件%d...' % self.userName)
  84.  
  85. #写入文件:
  86. with open('./images/' + str(self.userName) + '.png', 'wb') as f: #存入也该项目同级的images文件夹中
  87. f.write(images)
  88.  
  89. #计数器加一
  90. self.userName += 1
  91.  
  92. if __name__ == '__main__':
  93. mySpider = Spider()
  94. mySpider.tiebaSpider()

  

13-爬取百度贴吧中的图片(python+xpath)的更多相关文章

  1. Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  2. 使用python爬取百度贴吧内的图片

    1. 首先通过urllib获取网页的源码 # 定义一个getHtml()函数 def getHtml(url): try: page = urllib.urlopen(url) # urllib.ur ...

  3. Python学习 —— 爬虫入门 - 爬取Pixiv每日排行中的图片

    更新于 2019-01-30 16:30:55 我另外写了一个面向 pixiv 的库:pixiver 支持通过作品 ID 获取相关信息.下载等,支持通过日期浏览各种排行榜(包括R-18),支持通过 p ...

  4. python 爬取百度翻译进行中英互译

    感谢RoyFans 他的博客地址http://www.cnblogs.com/royfans/p/7417914.html import requests def py(): url = 'http: ...

  5. 写一个python 爬虫爬取百度电影并存入mysql中

    目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...

  6. Python爬虫实例(一)爬取百度贴吧帖子中的图片

    程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 http:// ...

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

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

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

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...

  9. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

随机推荐

  1. SQL面试题-行列互换-if、【case when】

    http://www.cda.cn/view/21469.html tb_lemon_grade中,表中字段id,student_name,course,score分别表示成绩id,学生姓名,课程名称 ...

  2. 十二、python沉淀之路--内置函数

    1.abs函数,求绝对值. a = abs(-3) print(a) 返回:3 2.all函数:判断是否是可迭代对象. 官方解释:Return True if bool(x) is True for ...

  3. openfaas 了解

    1. 官方介绍 OpenFaaS (Functions as a Service) is a framework for building serverless functions with Dock ...

  4. 使用MSBuild实现完整daily build流程

    一.MSBuild 在微软软件开发中,每日构建是最重要的过程之一,被称为微软产品开发的“心跳”.简单来看,每天构建系统将整个产品解决方案完整构建一遍,生成的目标文件和安装文件被放置在一个共享位置.接着 ...

  5. IBM Cognos 10.2 最新体验之旅

    IBM Cognos Data Manager 数据集市的构建利器 本文详细的介绍了 Cognos 最新版本 10.2 的数据集市构建器 Data Manager 的使用,对于希望系统了解 Cogno ...

  6. FastAdmin 社区 FAQ 帖子收集(F4NNIU 版 2018-08-12)

    FastAdmin 社区 FAQ 帖子收集 为什么Selectpage下拉列表在编辑时总是返回第一行的值? https://forum.fastadmin.net/thread/2399 根据条件值判 ...

  7. 谷歌设置支持webgl

    浏览器报错: could not initialize WebGl 因为谷歌默认不支持WebGl 在浏览器器中输入 about:flags 然后开启:覆盖软件渲染列表,覆盖内置的软件渲染列表,并对不支 ...

  8. tomcat启动报错:Bean name 'XXX' is already used in this <beans> element

    如题,tomcat容器启动时加载spring的bean,结果报错如下: 六月 28, 2017 9:02:25 上午 org.apache.tomcat.util.digester.SetProper ...

  9. mysql函数之一:INSTR、LOCATE、POSITION VS LIKE

    LOCATE.POSITION和INSTR函数相似功能实例 使用LOCATE.POSITION和INSTR函数查找字符串中指定子字符串的开始位置.SQL语句如下: mysql>SELECT LO ...

  10. composer 发布自己的开源软件

    首先创建一个github项目. 在项目中,创建一个composer.json文件. { "name": "jiqing9006/valid", "de ...