码迷,mamicode.com
首页 > 编程语言 > 详细

13-爬取百度贴吧中的图片(python+xpath)

时间:2018-07-15 14:58:51      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:clear   http   url编码   ref   内容   img   XML   百度贴吧   name   

通过xpath分析页面,爬取页面中的图片:

技术分享图片

#_*_ coding: utf-8 _*_

‘‘‘
Created on 2018年7月15日
@author: sss
function: 使用xpath还处理爬取的数据

‘‘‘
from lxml import etree
import urllib
from pip._vendor.distlib.compat import raw_input
from asyncio.tasks import sleep

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 #url中的page number
            word = {‘pn‘: pn, ‘kw‘: self.tiebaName}
        
            word = urllib.parse.urlencode(word ) #转化为url编码格式
            myUrl = self.url + ‘?‘ + word 
            
            #调用页面处理函数load_Page
            #并获取页面的所有帖子链接
            links = self.loadPage(myUrl)
            
    #开始抓取每个首页所有楼主发帖的标贴连接 
    def loadPage(self, url ):        
        req = urllib.request.Request(url, headers=self.ua_header)
        html = urllib.request.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 = urllib.request.Request(link, headers= self.ua_header)
        html = urllib.request.urlopen(req).read()
        
        selector = etree.HTML(html)
        
        #获取这个帖子里的所有图片的src路径
        imagesLinks = selector.xpath(‘//img[@class="BDE_Image"]/@src‘)
        
        #获取图片路径,下载保存
        for imagesLink in imagesLinks:
            self.writeImages(imagesLink)
            
        print(‘完成所有下载!‘)
        
    #保存页面中的图片
    def writeImages(self, imagesLink):
        """
                    将Images里的二进制内容存入到userNname文件中
        """
        print(imagesLink)
        
        #通过图片连接获取图片内容:
        images = urllib.request.urlopen(imagesLink).read()
        
        print(‘正在存储文件%d...‘ % self.userName)
        
        #写入文件:
        with open(‘./images/‘ + str(self.userName) + ‘.png‘, ‘wb‘) as f:  #存入也该项目同级的images文件夹中
            f.write(images)
        
        #计数器加一
        self.userName += 1  
        
if __name__ == ‘__main__‘:
    mySpider = Spider()
    mySpider.tiebaSpider()


   

  

13-爬取百度贴吧中的图片(python+xpath)

标签:clear   http   url编码   ref   内容   img   XML   百度贴吧   name   

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/9313356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!