python爬虫案例:使用XPath爬网页图片
用XPath来做一个简单的爬虫,尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。
- # -*- coding:utf-8 -*-
- import urllib
- import urllib2
- from lxml import etree
- def loadPage(url):
- """
- 作用:根据url发送请求,获取服务器响应文件
- url: 需要爬取的url地址
- """
- #print url
- #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"}
- request = urllib2.Request(url)
- html = urllib2.urlopen(request).read()
- # 解析HTML文档为HTML DOM模型
- content = etree.HTML(html)
- #print content
- # 返回所有匹配成功的列表集合
- link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
- #link_list = content.xpath('//a[@class="j_th_tit"]/@href')
- for link in link_list:
- fulllink = "http://tieba.baidu.com" + link
- # 组合为每个帖子的链接
- #print link
- loadImage(fulllink)
- # 取出每个帖子里的每个图片连接
- def loadImage(link):
- 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"}
- request = urllib2.Request(link, headers = headers)
- html = urllib2.urlopen(request).read()
- # 解析
- content = etree.HTML(html)
- # 取出帖子里每层层主发送的图片连接集合
- #link_list = content.xpath('//img[@class="BDE_Image"]/@src')
- # link_list = content.xpath('//div[@class="post_bubble_middle"]')
- link_list = content.xpath('//img[@class="BDE_Image"]/@src')
- # 取出每个图片的连接
- for link in link_list:
- # print link
- writeImage(link)
- def writeImage(link):
- """
- 作用:将html内容写入到本地
- link:图片连接
- """
- #print "正在保存 " + filename
- 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"}
- # 文件写入
- request = urllib2.Request(link, headers = headers)
- # 图片原始数据
- image = urllib2.urlopen(request).read()
- # 取出连接后10位做为文件名
- filename = link[-10:]
- # 写入到本地磁盘文件内
- with open(filename, "wb") as f:
- f.write(image)
- print "已经成功下载 "+ filename
- def tiebaSpider(url, beginPage, endPage):
- """
- 作用:贴吧爬虫调度器,负责组合处理每个页面的url
- url : 贴吧url的前部分
- beginPage : 起始页
- endPage : 结束页
- """
- for page in range(beginPage, endPage + 1):
- pn = (page - 1) * 50
- #filename = "第" + str(page) + "页.html"
- fullurl = url + "&pn=" + str(pn)
- #print fullurl
- loadPage(fullurl)
- #print html
- print "谢谢使用"
- if __name__ == "__main__":
- kw = raw_input("请输入需要爬取的贴吧名:")
- beginPage = int(raw_input("请输入起始页:"))
- endPage = int(raw_input("请输入结束页:"))
- url = "http://tieba.baidu.com/f?"
- key = urllib.urlencode({"kw": kw})
- fullurl = url + key
- tiebaSpider(fullurl, beginPage, endPage)
效果:
python爬虫案例:使用XPath爬网页图片的更多相关文章
- Python 爬虫之 Beautifulsoup4,爬网站图片
安装: pip3 install beautifulsoup4 pip install beautifulsoup4 Beautifulsoup4 解析器使用 lxml,原因为,解析速度快,容错能力强 ...
- 【Python爬虫案例学习】下载某图片网站的所有图集
前言 其实很简短就是利用爬虫的第三方库Requests与BeautifulSoup. 其实就几行代码,但希望没有开发基础的人也能一下子看明白,所以大神请绕行. 基本环境配置 python 版本:2.7 ...
- Python爬虫:为什么你爬取不到网页数据
前言: 之前小编写了一篇关于爬虫为什么爬取不到数据文章(文章链接为:Python爬虫经常爬不到数据,或许你可以看一下小编的这篇文章), 但是当时小编也是胡乱编写的,其实里面有很多问题的,现在小编重新发 ...
- python爬虫Scrapy(一)-我爬了boss数据
一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
- python爬虫学习01--电子书爬取
python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...
随机推荐
- sublime text3常用的一些快捷键
--------------------------------下面的内容可以打印出来贴在电脑旁提醒自己-------------------- Ctrl + Shift + D 快速复制当前的一行 ...
- [AWS][GUI][VNC]rhel 7 安装GUI ,配置VNC
预计阅读时间:15分钟 预计配置时间:30分钟 (前提是已经申请AWS的EC2的rhel7 云主机并且成功运行) 目前AWS 亚马逊云免费试用一年,申请一个学习使用 痛点:没有GUI,无法搭建Jen ...
- HTML&CSS基础-html标签的实体
HTML&CSS基础-html标签的实体 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTML源代码 <!DOCTYPE html> <html&g ...
- 二进制搭建Kubernetes集群(最新v1.16.0版本)
目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...
- win10下无法安装loadrunner,提示“管理员已阻止你运行此应用”
如下图: 1.再次进入控制面板,并且选择用户账户后把最下面的[更改用户账户控制设置],里面有个滑条,把滑条拉到最下面的[从不通知]上面并且确定. 2.按[Win+R]快捷键打开运行,输入 gpedit ...
- jpa之No property buyerOpenId found for type OrderMaster! Did you mean 'buyerOpenid'?
java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...
- 通过iptables限制docker容器端口
如何限制docker暴露的对外访问端口 docker 会在iptables上加上自己的转发规则,如果直接在input链上限制端口是没有效果的.这就需要限制docker的转发链上的DOCKER表. # ...
- 韩顺平老师java视频全套-java视频教程下载
解压压缩包会有一个种子文件.直接迅雷下载即可,包含了韩顺平老师的java入门视频,jdbc,jsp,servlet,oracle,hibermate,spring,SHH框架,struct,linux ...
- lis框架各种方法的使用
//这个必须是lpedorapp表的主键才行LPEdorAppDB tLPEdorAppDB = new LPEdorAppDB();tLPEdorAppDB.setEdorAcceptNo(mEdo ...
- 题解 UVa11752
题目大意 输出所有小于 \(2^{64}-1\) 的正整数 \(n\), 使得 \(\exists p, q, a, b\in \mathbb{N+}, p\neq q\rightarrow a^p= ...