xpath获取标签对本身含内容, 获取html内容

之前一直使用BeautifulSoup(bs4)HTML标签内容,但是后面通过使用对比,当我们使用 html.parser 作为解析器时,BeautifulSoup 解析的耗时平均是 Xpath 的 1.8 倍+;当我们使用 lxml 作为解析器时,BeautifulSoup 解析的耗时虽有减少,但平均仍是 Xpath 的 1.5 倍+。加之引入IP代理池的时候,在使用BeautifulSoup 解析的情况下,程序竟然挂了,挂了。所以我们就改换Xpath解析。

话不多,开干

1.引入Xpath的三方库(python 3.0以后版本)

from lxml import html
etree=html.etree

引入其他库

import  requests
import os

#首先定义一个mzituData类
class  mzituData():
    # 初始化__init__方法
    def  __init__(self,headers):
        self.headers=headers

# 请求网页数据
    def response_web(self, url):
        response = requests.get(url, headers=headers)
        response.encoding = "UTF-8"
        mm_html = response.text
        return  mm_html
        #url为变量
        # 请求网页数据

def  request_imgData(self, url):
        img_response = requests.get(url, headers=headers)
        img_response.encoding = "UTF-8"
        return img_response
        # url为变量

#1.获取所有分类的URL
    def get_all_url(self,url):
        sort_html=self.response_web(url)

#Xpath用法   # / li / a / @ herf  这样取的应该是href的内容       / li / a / text()这样取得是标签内容
        html_xpath = etree.HTML(sort_html)
        #print("***************html_xpath***********""""""""", html_xpath)
       # / li / a / @ herf这样取的应该是href的内容      / li / a / text()这样取得是text内容
        data_list_url = html_xpath.xpath('//div[@class="all"]//li//a/@href')  # //data2为列表
        data_list_title = html_xpath.xpath('//div[@class="all"]//li//a/text()')

#使用zip()函数同时遍历2组列表list,且能一一对应起来
        for data_url,data_title in zip(data_list_url,data_list_title):
            print("***************************************",data_url,data_title)
            self.make_dir(data_title)
            self.oneSort_allUrl(data_url)

# 2.创建文件夹,需要读取文件夹名称folderName
    def make_dir(self, title):
        save_path = "D:\Img_Save_2019201920020"
        folderName = str(title).replace('?', '_')
        print(folderName)
        folderName = folderName.strip()
        isExists = os.path.exists(os.path.join(save_path, folderName))
        if not isExists:
            print(u'建了一个名字叫做', folderName, u'的文件夹!')
            os.makedirs(os.path.join(save_path, folderName))
            os.chdir(os.path.join(save_path, folderName))  ##切换到目录
            return True
        else:
            print(u'名字叫做', folderName, u'的文件夹已经存在了!')
            return False

# 2.先获取一个分类的所有页面的URL,再依次遍历,直到找到所有分类的所有页面的URL
    def oneSort_allUrl(self, url):
        oneSort_html = self.response_web(url)
        #print("***************oneSort_html***********""""""""", oneSort_html)
        html_xpath = etree.HTML(oneSort_html)
        max_span = html_xpath.xpath('//div[@class="pagenavi"]//span/text()')[-2]
        #print("####################################",max_span)
        for page_num in range(0, int(max_span) + 1):
            # page_url=""
            if page_num == 0:
                page_url = url
            else:
                page_url = url + '/' + str(page_num)
            self.onePage_imgUrl(page_url)

# 3先获取一个页面URL对应的所有图片地址(url),,再依次遍历,直到找到所有页面URL对应的所有图片地址(url),一个页面就只有一张照片
    def onePage_imgUrl(self, url):
        onePage_img_html = self.response_web(url)
        #print("################onePage_img_html####################", onePage_img_html)
        html_xpath = etree.HTML(onePage_img_html)
        # / li / a / @ herf这样取的应该是href的内容      / li / a / text()这样取得是text内容
        data_list_url = html_xpath.xpath('//div[@class="main-image"]//a/img/@src')  # //data2为列表

for img_url in   data_list_url:
            print("################img_url####################", img_url)
            self.save_img(img_url)
    # 4.下载保存图片
    def save_img(self, url):
        time.sleep(3)
        img_Name = url[-9:-4]
        img = self.request_imgData(url)
        print("*******************type(img)**********************", img)  # <class 'requests.models.Response'>
        f = open(img_Name + '.jpg', 'ab')
        f.write(img.content)
        f.close()

#self.save_img(data_list_url)
headers = {
     'referer':'https://www.mzitu.com',
    'User-Agent': "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
        }
url='http://www.mzitu.com/all'
#实例化
mzitu=mzituData(headers)
#调用对象的方法
mzitu.get_all_url(url)

(三)python(基于面向对象)使用Requests+Xpath提取HTML内容(妹子网MM图片)相关推荐

  1. (二)python基于面向对象爬取开车吧的秀人模块MM图片

    爬取图片网站:http://www.kckckc.net/ 秀人网 需要用到的库有: import requests from bs4 import BeautifulSoup import re i ...

  2. #私藏项目实操分享#Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评

    前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: jieba模块: pandas模 ...

  3. Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评

    前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 **Python版本:**3.6.4 相关模块: requests模块: jieba模块: pan ...

  4. 21天Python学习——lxml库与Xpath提取网页数据

    ​ ​ 活动地址:CSDN21天学习挑战赛 一.爬虫提取网页数据的流程图 图源:100天精通Python(爬虫篇)--第45天:lxml库与Xpath提取网页数据_无 羡ღ的博客-CSDN博客_pyt ...

  5. Python初级爬虫(利用多任务协程爬取虎牙MM图片)

    Python多任务协程下载虎牙直播MM图片 # coding = utf-8 import re import gevent from gevent import monkey, pool impor ...

  6. Python爬虫必备技能,Xpath提取数据规格详解

    python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 很多人学习python,不 ...

  7. python生成中文词云的代码_[python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写...

    1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意 ...

  8. 21天学习挑战赛——Python爬虫 lxml库与Xpath提取网页数据

    目录 ​1. 爬虫提取网页数据流程图 2. lxml库 2.1 解析HTML网页 3. Xpath 3.1 选取节点 3.2 谓语 3.3 选取未知节点 3.4 选取若干元素 4. Xpath实战 4 ...

  9. python基于ocr的视频字幕提取

    导读 在无数次的996加班后的下午,忽然听见了QQ的震动,我发现有人居然给我发消息~原来是我的妹妹给我发来了消息,内容如下: 她现在正兼职帮学校帮老师配教学视频的字幕,他们配上去了,但是老师又有一个奇 ...

  10. python爬虫搜特定内容的论文_python基于BeautifulSoup实现抓取网页指定内容的方法...

    python基于BeautifulSoup实现抓取网页指定内容的方法 更新时间:2015年07月09日 10:12:50 作者:光索与诺 这篇文章主要介绍了python基于BeautifulSoup实 ...

最新文章

  1. pandas内置数据集_pandas内置数据集_Pandas中的示例数据集
  2. 1768: 回文平方数(进制转换)
  3. 计算机组网配置,计算机组网技术与配置教案..doc
  4. python 将一个字符list的列表扁平化成了一个list
  5. Angularjs-项目搭建
  6. 响应服务器589,示例HTTP范围请求会话
  7. 开源HTML编辑器xhEditor用法详解
  8. 国产ADAS“再”突围
  9. FastText文本分类以及生成词向量
  10. 基于JavaSwing的餐厅点餐系统
  11. matlab 有限元分析
  12. [激光原理与应用-25]:《激光原理与技术》-11- 激光产生技术-非线性技术之激光倍频、非线性晶体CLBO、BBO、LBO
  13. SQLserver技巧 年份判断,以及向上想下取整
  14. 「小白学Python」Windows安装Python
  15. AIX命令创建JFS2的LV及FS(非smitty交互模式)
  16. R语言非线性拟合之多项式回归
  17. 【第十章 线性代数之 特征向量与特征值】3Blue1Brown
  18. 用这个方法解决Mac OS安装软件“软件已损坏”的提示,百试不爽
  19. [GYCTF2020]Blacklist 使用handler函数进行sql堆注入
  20. React中CSS样式

热门文章

  1. VS/C#添加chart控件
  2. 尔雅 科学通史(吴国盛) 个人笔记及课后习题 2018 第一章 科学通史绪论
  3. 电子工程师最全面试题大全
  4. 小米手机助手linux,小米手机助手
  5. 【实战案例】利用Python做出趣味版防沉迷小程序
  6. 微信模板消息发送不显示小程序链接的处理
  7. 教务系统自动评教_「四川大学教务处本科登陆系统」四川大学本科教务系统 - 一键评教 - seo实验室...
  8. js 的常用工具类库
  9. python 安装PyQt4
  10. 实地测试电源模块性能