本篇是使用XPath的案例,更多内容请参考:Python学习指南

案例:使用XPath的爬虫

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

#-*- coding:utf-8 -*-
#tieba_xpath.py"""作用:本案例使用XPath做一个简单的爬虫,我们尝试爬去某个贴吧的所有帖子
"""import os
import urllib2
import urllib
from lxml import etreeclass Spider:def __init__(self):self.tiebaName = raw_input("请输入需要访问的贴吧: ")self.beginPage = int(raw_input("请输入起始页: "))self.endPage = int(raw_input("请输入终止页: "))self.url = "http://tieba.baidu.com/f"self.ua_header = {"User-Agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}#图片编号self.userName = 1def tiebaSpider(self):for page in range(self.beginPage, self.endPage+1):pn = (page-1) * 50   #page numberword = {'pn':pn, 'kw':self.tiebaName}word = urllib.urlencode(word)   #转换成url编码格式(字符串)myUrl = self.url + "?" + word#示例:http://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3 & pn=50#调用 页面处理函数load_Page#并且获取页面所有帖子链接links = self.loadPage(myUrl)  #urllib2_test3.py#获取页面内容def loadPage(self, url):req = urllib2.Request(url, headers = self.ua_header)html = urllib2.urlopen(req).read()#解析html为HTML DOM文档selector = etree.HTML(html)#抓取当前页面的所有帖子的url的后半部分,也就是帖子编号#http://tieba.baidu.com/p/4884069807里的"p/4884069807"links = selector.xpath('//div[@class="threadlist_lz clearfix"]/div/a[@rel="noreferrer"]/@href')#links类型为etreeElementString列表#遍历列表,并且合并为一个帖子地址,调用图片处理函数loadImagefor link in links:link = "http://tieba.baidu.com" + linkself.loadImage(link)#获取图片def loadImage(self, link):req = urllib2.Request(link, headers = self.ua_header)html = urllib2.urlopen(req).read()selector = etree.HTML(html)#获取这个帖子里面所有图片的src路径imageLinks = selector.xpath('//img[@class="BDE_Image"]/@src')#依次取出图片路径,下载保存for imageLink in imageLinks:self.writeImages(imageLink)#保存页面内容def writeImages(self, imageLink):"""将images里的二进制内容存入到userName文件中"""print(imageLink)print "正在存储文件 %d..."%self.userName#1.打开一个文件,返回一个文件对象file = open('./images/'+str(self.userName) + '.png', 'wb')#获取图片里内容images = urllib2.urlopen(imageLink).read()#调用文件对象write()方法,将page_html的内容写入到文件里file.write(images)#最后关闭文件file.close()#计数器自增1self.userName += 1#模拟__main__函数:
if __name__ == '__main__':#首先创建爬虫对象mySpider = Spider()#调用爬虫对象的方法,开始工作mySpider.tiebaSpider()

转载于:https://www.cnblogs.com/miqi1992/p/8025528.html

Python爬虫(十三)_案例:使用XPath的爬虫相关推荐

  1. python二手交易平台代码_PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)...

    说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...

  2. Python爬虫(十一)_案例:使用XPath的爬虫

    现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载到本地. #-*- coding:utf-8 -*- #tieba_xpath.py" ...

  3. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

  4. nodejs爬虫实战_简单高效的 nodejs 爬虫模型

    这篇文章讲解一下yunshare项目的爬虫模型. 使用 nodejs 开发爬虫很简单,不需要类似 python 的 scrapy 这样的爬虫框架,只需要用 request 或者 superagent ...

  5. python爬虫正则表达式实例-Python爬虫(十一)_案例:使用正则表达式的爬虫

    本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 打开之后,不 ...

  6. Python爬虫(九)_案例:使用正则表达式的爬虫

    现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5 ...

  7. python编程入门与案例详解pdf-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬 ...

  8. python回归预测例子_案例实战 | 逻辑回归实现客户流失预测(附Python代码与源数据)...

    关注一下~,更多商业数据分析案例等你来撩 前言 利用逻辑回归进行客户流失预警建模中涵盖了许多比较细的知识点,思维导图只展示了极小的一部分,相关知识点链接将穿插在文中.(源数据源代码空降文末获取) 数据 ...

  9. python多进程 保活_老板,你这个爬虫保活吗?

    点击上方"咸鱼学Python",选择"加为星标" 第一时间关注Python技术干货! 作者:wsgao 原文:https://wsgzao.github.io/ ...

最新文章

  1. .Net下的签名与混淆
  2. STL的forward_list链表
  3. mysql ubuntu client_ubuntu 安装 mysqlclient
  4. 一段话系列-正则基础
  5. linux中fopen和open的区别,Linux下open与fopen的区别
  6. java面向服务编程_设计面向领取驱动(DDD)的微服务
  7. 详解linux netstat输出的网络连接状态信息
  8. cydia软件路径_ifile下载和安装及使用图文教程 强大的iPhone文件管理器
  9. Win10 LTSC 2021安装及相关bug解决
  10. 谷歌Google搜索语法
  11. 金蝶K3销售订单批量库存查询功能开发
  12. [Vue Router warn]
  13. CAD2018下载AutoCAD2018下载安装教程附软件下载
  14. 计算机内无法使用搜狗,电脑搜狗输入法不能用怎么办
  15. 淘宝/天猫API:item_search_similar-搜索相似的商品
  16. 使用gitbook时graceful-fs报错:TypeError: cb.apply is not a function的解决方案
  17. 页面首页、上一页、下一页、尾页设置
  18. while(true) Thread.Sleep(XX)我通常是用这种写法,有没有更好的写法或者改进
  19. 安卓开机画面_为了安卓系统,入手文石BOOX Poke Pro电子书阅读器
  20. 麒麟信安操作系统:挖掘场景,与云俱进 ——携手openEuler赋能关键行业应用

热门文章

  1. 注册后自动登录 php,php – 自动注册后用户身份验证
  2. 大学学习论坛 需求分析报告.菜鸟版.多喷.看看问题所在
  3. mysql安全权限的讲解
  4. golang获取结构体中的tag_26. Go 语言中结构体的 Tag 用法
  5. Cenos6.4下远程连接mysql报错1130
  6. layering-cache
  7. HBase数据存储格式
  8. 新生命 · 人工智能 · 未来
  9. JEPLUS平台首页规划简单介绍——JEPLUS软件快速开发平台
  10. python--列表与字典