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()

时间: 2024-10-07 15:54:25

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

Python爬虫(十一)_案例:使用正则表达式的爬虫

本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看出里面一个一个非常有内涵的段子,当你进行翻页的时候,注意url地址的变化: 第一页url: http: //www.neihan8.com/article/list_

python 归纳 (十三)_队列Queue在多线程中使用

# -*- coding: UTF-8 -*- """ 多线程同时读队列 总结: 1. 会阻塞 if self._jobq.qsize() > 0 进入逻辑,此时被其他线程把数据取完了, 在data = self._jobq.get() 阻塞 2. 需要学习锁使用 逻辑: * 主线程提前往队列写好所有数据 * 子线程读取队列数据,没有就退出线程 """ import Queue import threading import time im

Python 爬虫 解析库的使用 --- XPath

一.使用XPath XPath ,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索. 所以在爬虫时,我们完全可以使用XPath来做相应的信息提取.本次随笔中,我们就介绍XPath的基本用法. 1.XPath概览 XPath的选择功能十分强大,它提供了非常简洁明了的路径选择表达式.另外,它还提供了超过100个内建函数,用于字符串.数值.时间的匹配以及节点.序列的处理等.几乎所有我们想要定

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫 网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据. python写爬虫的优势 其实以上功能很多语言和工具都能做,但是用python爬取的速度更快,代码最简单,总而言之就是高效!与其它的编程语言作比较,python爬去网站的文档的接口更清晰明了,python的各种包提供给开发者访问网页文档的API.请先静下心看案例介绍.再进入里面寻找视频教程 由认识爬虫可知,在互联网上爬去内容,必然会有访问浏览器这个过程.程序员爬取网站内容必须模拟浏览器

爬虫(4)_代码分析

[后续会整理 出PPT,将放置源码素材内以供下载~] [任何爬虫均只为学习,不用于商业及其他目的,侵权删] [如果你有其他测试领域的想法,也可以私信我发稿给我在公众号上展示哦] 一.演示 首先,我们先观看下效果,这个效果为后端执行爬取的动作:暂时不涉及入库及前端展示.[虚机centos网络不好,我切换到了window演示] [请关注公众号观看] 我将爬取的内容存入了html文件,并保留了html文件的样式,样式地址来源于官网样式,没有继续爬取官网的样式 二.安装 在前两节中,我们安装了pytho

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记3:元组

元组 元组不能修改:(可能你已经注意到了:字符串也不能修改.) 创建元组的语法很简单:如果用逗号分隔了一些值,那么你就自动创建了元组. >>> 1,3,'ab' (1, 3, 'ab') 元组也是(大部分时候是)通过圆括号括起来的. >>> (1,3,'13') (1, 3, '13') 空元组可以用没有内容的两个圆括号来表示. 如何实现包括一个值的元组呢? >>> (5) 5 >>> ('ab') 'ab' >>>

通过jstack定位在线运行java系统故障_案例1

问题描述: 在一个在线运行的java web系统中,会定时运行一个FTP上传的任务,结果有一天发现,文件正常生成后却没有上传. 问题初步分析: 1.查看日志文件 发现这个任务只打印了开始进入FTP处理的日志,但是没有打印FTP处理完成的日志. 从代码上看,FTP上传处理的代码异常保护都非常的好,如果出现异常,就会进行打印,而日志文件中却没有相关的信息,甚是奇怪.怀疑是FTP过程问题,如对方FTP服务器有什么问题导致,但是却找不到证据. 苦于无法窥探java运行系统内部信息,祭出杀手锏-jstac