(三)python(基于面向对象)使用Requests+Xpath提取HTML内容(妹子网MM图片)
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图片)相关推荐
- (二)python基于面向对象爬取开车吧的秀人模块MM图片
爬取图片网站:http://www.kckckc.net/ 秀人网 需要用到的库有: import requests from bs4 import BeautifulSoup import re i ...
- #私藏项目实操分享#Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评
前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: jieba模块: pandas模 ...
- Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评
前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 **Python版本:**3.6.4 相关模块: requests模块: jieba模块: pan ...
- 21天Python学习——lxml库与Xpath提取网页数据
活动地址:CSDN21天学习挑战赛 一.爬虫提取网页数据的流程图 图源:100天精通Python(爬虫篇)--第45天:lxml库与Xpath提取网页数据_无 羡ღ的博客-CSDN博客_pyt ...
- Python初级爬虫(利用多任务协程爬取虎牙MM图片)
Python多任务协程下载虎牙直播MM图片 # coding = utf-8 import re import gevent from gevent import monkey, pool impor ...
- Python爬虫必备技能,Xpath提取数据规格详解
python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 很多人学习python,不 ...
- python生成中文词云的代码_[python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写...
1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的"关键词"在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意 ...
- 21天学习挑战赛——Python爬虫 lxml库与Xpath提取网页数据
目录 1. 爬虫提取网页数据流程图 2. lxml库 2.1 解析HTML网页 3. Xpath 3.1 选取节点 3.2 谓语 3.3 选取未知节点 3.4 选取若干元素 4. Xpath实战 4 ...
- python基于ocr的视频字幕提取
导读 在无数次的996加班后的下午,忽然听见了QQ的震动,我发现有人居然给我发消息~原来是我的妹妹给我发来了消息,内容如下: 她现在正兼职帮学校帮老师配教学视频的字幕,他们配上去了,但是老师又有一个奇 ...
- python爬虫搜特定内容的论文_python基于BeautifulSoup实现抓取网页指定内容的方法...
python基于BeautifulSoup实现抓取网页指定内容的方法 更新时间:2015年07月09日 10:12:50 作者:光索与诺 这篇文章主要介绍了python基于BeautifulSoup实 ...
最新文章
- pandas内置数据集_pandas内置数据集_Pandas中的示例数据集
- 1768: 回文平方数(进制转换)
- 计算机组网配置,计算机组网技术与配置教案..doc
- python 将一个字符list的列表扁平化成了一个list
- Angularjs-项目搭建
- 响应服务器589,示例HTTP范围请求会话
- 开源HTML编辑器xhEditor用法详解
- 国产ADAS“再”突围
- FastText文本分类以及生成词向量
- 基于JavaSwing的餐厅点餐系统
- matlab 有限元分析
- [激光原理与应用-25]:《激光原理与技术》-11- 激光产生技术-非线性技术之激光倍频、非线性晶体CLBO、BBO、LBO
- SQLserver技巧 年份判断,以及向上想下取整
- 「小白学Python」Windows安装Python
- AIX命令创建JFS2的LV及FS(非smitty交互模式)
- R语言非线性拟合之多项式回归
- 【第十章 线性代数之 特征向量与特征值】3Blue1Brown
- 用这个方法解决Mac OS安装软件“软件已损坏”的提示,百试不爽
- [GYCTF2020]Blacklist 使用handler函数进行sql堆注入
- React中CSS样式