爬取网站
在此,我先把网站奉上
http://pic.netbian.com/4kdongman/
我们爬取的是动漫图片,别的可以自行爬取哦
爬取的基本步骤
我们肯定要先导入包,这里我们用的是xpath爬取,所以需要的包有以下几个:
import requests
import os
from lxml import etree
我们首先先爬取页面的数据,我们可以鼠标右键点击检查查看图片具体在哪个位置
我们看到了他的标签有很多
xpath的简单介绍
我们先简单介绍一下xpath的简单用法:
xpath解析:最常见且最便捷高效的一种解析方式,通用
-xpath解析原理:
- 1.实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中
- 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
- 环境安装:
- pip install lxml
- 如何实例化etree对象from lxml import etree
- 1.将本地的html文档中的源码数据加载到etree对象中
etree.parse(filePath)
- 2.将从互联网获取的源码数据加载到该对象中
etree.HTML(‘page_text’)
- xpath(‘xpath表达式(例如:/html/head/title)’)
- / 表示从根节点开始定位,表示一个层级
- // 表示多个层级,开始的化就是直接找到从任意位置开始定位
- 属性定位:xpath(’//div[@class=‘属性’] tag[@attrName = ‘attrValue]’)
- 索引定位xpath(’//div[@class=‘song’]/p[3]’)
- xpath(’//div[@class=‘tang’]//li[5]/a/text()’)[0]#返回文本数据,返回列表
- 取文本
- /text()直系文本
- //text()所有文本内容
-取树形
- /@attrName ==>img/2src
那我们直接进行爬取页面数据
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}
url = 'http://pic.netbian.com/4kdongman/index.html'
response = requests.get(url, headers=headers)
pageText = response.text
海量4k图片我们需要创建一个文件夹来盛放啊(手动狗头)
#创建文件夹
if not os.path.exists('./picLibs'):
os.mkdir('./picLibs')
路径可以自己选择。
之后我们需要创建一个xpath对象来进行查找数据吧,然后我们看到我们想要的网站在ul[@class=“clearfix”]/li里,那我们需要爬取所有里标签,然后li标签里的/img/@src是我们需要的,那我们开始工作吧!
for Img in pgImg:
photo = 'http://pic.netbian.com' + Img.xpath('./a/img/@src')[0]
photoName = Img.xpath('./a/img/@alt')[0] + '.jpg'
#处理中文名称乱码的常用解决,我们会发现打印出来会乱码,不得不解决
photoName = photoName.encode('iso-8859-1').decode('gbk')
print(photo, photoName)
之后我们得到了网站之后就可以开启我们的图片爬取了!!!
#请求图片
imgData = requests.get(photo, headers=headers).content
imgPath = r'C:/Users/谢迎博啊/PycharmProjects/pythonProject/python爬虫开发入门/数据解析/picLibs/' + photoName
with open(imgPath, 'wb') as fp:
fp.write(imgData)
print(photoName, '下载成功')
但是我们才爬取一页啊,我们怎么忍心看着别的不拿啊!这时候我们就要对比网站了,先看第一页:http://pic.netbian.com/4kdongman/
第二页:http://pic.netbian.com/4kdongman/index_2.html
有点不一样啊,我们来看以下把2变成1可不可以打开呐?
很遗憾不可以,那我们只能分开了,另写一份:
for x in range(2, 147):
url = 'http://pic.netbian.com/4kdongman/index_%d.html'%x
response = requests.get(url, headers=headers)
#手动设定响应数据编码
# response.encoding = 'utf-8'
pageText = response.text
#创建文件夹
if not os.path.exists('./picLibs'):
os.mkdir('./picLibs')
#数据解析
tree = etree.HTML(pageText)
pgImg = tree.xpath('//ul[@class="clearfix"]/li')
for Img in pgImg:
photo = 'http://pic.netbian.com' + Img.xpath('./a/img/@src')[0]
photoName = Img.xpath('./a/img/@alt')[0] + '.jpg'
#处理中文乱码的常用解决
photoName = photoName.encode('iso-8859-1').decode('gbk')
print(photo, photoName)
#请求图片
imgData = requests.get(photo, headers=headers).content
imgPath = r'C:/Users/谢迎博啊/PycharmProjects/pythonProject/python爬虫开发入门/数据解析/picLibs/' + photoName
with open(imgPath, 'wb') as fp:
fp.write(imgData)
print(photoName, '下载成功')
我爬取的只是动漫部分哦,其余部分可以自行爬取哦!