案例:使用XPath的的爬虫
来源:互联网 发布:算法工程师的年薪 编辑:程序博客网 时间:2024/06/05 09:31
案例:使用XPath的爬虫
现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。
# tieba_xpath.py#!/usr/bin/env python# -*- coding:utf-8 -*-import osimport urllibimport urllib2from 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 = 1 def tiebaSpider(self): for page in range(self.beginPage, self.endPage + 1): pn = (page - 1) * 50 # page number word = {'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 文档 selector=etree.HTML(html) #抓取当前页面的所有帖子的url的后半部分,也就是帖子编号 # http://tieba.baidu.com/p/4884069807里的 “p/4884069807” links = selector.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href') # links 类型为 etreeElementString 列表 # 遍历列表,并且合并成一个帖子地址,调用 图片处理函数 loadImage for link in links: link = "http://tieba.baidu.com" + link self.loadImages(link) # 获取图片 def loadImages(self, link): req = urllib2.Request(link, headers = self.ua_header) html = urllib2.urlopen(req).read() selector = etree.HTML(html) # 获取这个帖子里所有图片的src路径 imagesLinks = selector.xpath('//img[@class="BDE_Image"]/@src') # 依次取出图片路径,下载保存 for imagesLink in imagesLinks: self.writeImages(imagesLink) # 保存页面内容 def writeImages(self, imagesLink): ''' 将 images 里的二进制内容存入到 userNname 文件中 ''' print imagesLink print "正在存储文件 %d ..." % self.userName # 1. 打开文件,返回一个文件对象 file = open('./images/' + str(self.userName) + '.png', 'wb') # 2. 获取图片里的内容 images = urllib2.urlopen(imagesLink).read() # 3. 调用文件对象write() 方法,将page_html的内容写入到文件里 file.write(images) # 4. 最后关闭文件 file.close() # 计数器自增1 self.userName += 1# 模拟 main 函数if __name__ == "__main__": # 首先创建爬虫对象 mySpider = Spider() # 调用爬虫对象的方法,开始工作 mySpider.tiebaSpider()
阅读全文
0 0
- 案例:使用XPath的的爬虫
- 爬虫 xpath 的使用与范例
- 案例:使用BeautifuSoup4的爬虫
- python爬虫xpath的语法
- python爬虫xpath的语法
- 爬虫工具lxml库的使用和Xpath语法
- python爬虫之XPath与lxml的使用
- python爬虫系列(七):XPath的使用
- 案例:使用正则表达式的爬虫
- 爬虫的综合案例
- xpath的使用
- XML XPath的使用
- dom4j xpath的使用
- XPath的使用
- XPath的使用一
- XPath的使用
- Jsoup xpath的使用
- Xpath的使用
- Git(IV)分支与合并分支
- [ZZ]IT 民工男的 CS 课程记忆
- Matlab之初
- 对于文本溢出处理的方法
- SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询
- 案例:使用XPath的的爬虫
- 【Python爬虫】添加高级功能
- neon的常见汇编命令
- 手绘思维导图的学习技巧
- background-size的取值有哪些?cover与contain有什么区别?
- javascript 通过定时循环检测获取快速获取图片实际大小的宽高
- android 顶部悬停折叠CoordinatorLayout,AppBarLayout
- fastDFS token有效性配置说明
- 选择排序-二分查找-Arrays-System-BigDecimal-BigInteger-Date-Calendar-Math