Python爬虫(十三)_案例:使用XPath的爬虫
本篇是使用XPath的案例,更多内容请参考:Python学习指南
案例:使用XPath的爬虫
现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载到本地。
#-*- coding:utf-8 -*-
#tieba_xpath.py
"""
作用:本案例使用XPath做一个简单的爬虫,我们尝试爬去某个贴吧的所有帖子
"""
import os
import urllib2
import urllib
from lxml import etree
class 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 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列表
#遍历列表,并且合并为一个帖子地址,调用图片处理函数loadImage
for link in links:
link = "http://tieba.baidu.com" + link
self.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()
#计数器自增1
self.userName += 1
#模拟__main__函数:
if __name__ == '__main__':
#首先创建爬虫对象
mySpider = Spider()
#调用爬虫对象的方法,开始工作
mySpider.tiebaSpider()

Python爬虫(十三)_案例:使用XPath的爬虫的更多相关文章
- PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- Python爬虫(十一)_案例:使用正则表达式的爬虫
本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起 ...
- [b0028] python 归纳 (十三)_队列Queue在多线程中使用
# -*- coding: UTF-8 -*- """ 多线程同时读队列 总结: 1. 会阻塞 if self._jobq.qsize() > 0 进入逻辑,此时被 ...
- 洗礼灵魂,修炼python(71)--爬虫篇—【转载】xpath/lxml模块,爬虫精髓讲解
Xpath,lxml模块用法 转载的原因和前面的一样,我写的没别人写的好,所以我也不浪费时间了,直接转载这位崔庆才大佬的 原帖链接:传送门 以下为转载内容: --------------------- ...
- 案例_(单线程)使用xpath爬取糗事百科
案例_(单线程)使用xpath爬取糗事百科 步骤如下: 首先通过xpath插件找出我们要爬取的信息的匹配规则 url = "https://www.qiushibaike.com/8hr/p ...
- Python 爬虫 解析库的使用 --- XPath
一.使用XPath XPath ,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索. 所 ...
- 小白学 Python 爬虫(20):Xpath 进阶
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- python爬虫(一)_爬虫原理和数据抓取
本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
随机推荐
- Holding Bin-Laden Captive!(1.多重背包 2.母函数)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- 初入WebService
搭建webservice需要用到的jar applicationContext.xml配置文件 <?xml version="1.0" encoding="UTF- ...
- Mongodb联合查询
Mongodb使用联合查询的重点需要添加@DBref 这样的话不会将整个文档保存,只会保存关联集合的id package com.java.web; import java.util.List; i ...
- jquery getScript动态加载JS方法改进详解[转载]
转载自http://www.jb51.net/article/31973.htm 有许多朋友需要使用getScript方法动态加载JS,本文将详细介绍此功能的实现方法 $.getScript( ...
- js数组遍历some,foreach,map,filter,every对比
1. [...].some(ck)函数 ---- 某个一个为true,则为true 对数组中每个元素执行一次ck函数,知道某个元素返回true,则直接返回true.如果都返回f ...
- 05).30分钟学会Servlet+过滤器+监听器+实际案例
一.Servlet简介: Servlet程序处理流程 二.Servlet程序实现 实现要求 Servlet属于java ee范畴,而java和javac属于java se范畴,要想编译servlet必 ...
- mkdir--命令
mkdir命令 mkdir:make directory(ies)的缩写,用来创建目录 1.语法 mkdir [OPTION]... DIRECTORY 注释:option是选择,可选,directo ...
- 【2】hadoop搭建准备软件
准备一:VMware虚拟工具: 链接:http://pan.baidu.com/s/1o7F4A6I 密码:w5ti 准备二:CentOS6.8虚拟机(64位):如果64位不允许安装,可能是电脑设置问 ...
- 在写一点关于MySQL的知识,感觉自己mmd
DBMS(Database Management System)数据库管理系统 包括有DDL(数据定义语言)和DML(数据操纵语言)以及DCL(数据库控制语言) 数据库设计方法: 1.需求分析阶段 ...
- Python 简单的天气预报
轻巧的树莓派一直是大家的热爱,在上面开发一些小东西让我们很有成就感,而在linux下,python能使麻烦的操作变得简单,而树莓派功耗还很低,相结合,完美! 1,直接进入正题,一般在linux或树莓派 ...