前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫(十三)_案例:使用XPath的爬虫

Python爬虫(十三)_案例:使用XPath的爬虫

作者头像
用户1174963
发布2018-01-17 12:49:50
9980
发布2018-01-17 12:49:50
举报
文章被收录于专栏:python学习指南

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

案例:使用XPath的爬虫

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

代码语言:javascript
复制
#-*- 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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 案例:使用XPath的爬虫
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档