2020-11-19

这篇博客探讨了如何获取网页上的图片数据,详细分析了静态文件中的图片爬取,特别是针对站长素材网站的高清图片。讲解了反爬机制中的图片懒加载问题,并介绍了数据解析的通用原理,包括使用bs4和xpath进行网页内容定位与提取。同时,讨论了爬取小说、糗事百科等实例,以及如何利用cookie和代理进行爬虫操作。
摘要由CSDN通过智能技术生成

如何获取爬取图片数据?

两种方式
方式1:requests
方式2:urllib

示例
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
#方式1:requests
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605757358956&di=9acd82a8edea5911205b117425b7b4c6&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F30%2F29%2F01300000201438121627296084016.jpg'
img_data = requests.get(url=url,headers=headers).content #获取是content
#content返回bytes类型的数据
with open('./cat.jpg','wb') as fp:  #图片是bytes类型,不需要加encoding
    fp.write(img_data)


#方式2:urllib
import urllib
url = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1605757358956&di=9acd82a8edea5911205b117425b7b4c6&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F30%2F29%2F01300000201438121627296084016.jpg'
urllib.request.urlretrieve(url=url,filename='./cat_1.jpg') #注意request没有s

两种方式主要的区别
是否可以进行请求头的伪装,urllib不能

数据解析 静态文件

正则
bs4(*)
xpath(*)
pyquery

在开发者工具中Elements和network中都可以显示当前页面的页面源码数据,区别是什么?
Elements:显示的页面源码数据是经过所有的请求加载和渲染完毕后对应的完整的页面源码数据,包括j,css等
如果页面存在动态加载数据,动态加载数据在Elements中是可以看到
如果不是动态加载的数据,可以到Elements中进行数据解析

network:对应response中显示的页面源码数据仅仅是当前这一个指定的数据包中请求到的数据,没有等到js,css等

站长素材高清图片爬取分析

反爬机制:图片懒加载.图片的img标签中应用了伪属性.只要当指定的事件满足后伪属性才会动态变成真正的属性名称.可视化范围内显示

import re
import os
dirName = 'ImgLibs'
if not os.path.exists(dirName):
    os.mkdir(dirName)
​
url = 'https://sc.chinaz.com/tupian/renwusuxie.html'
#获取整个页面数据
page_text = requests.get(url=url,headers=headers).text
#接下来就做数据解析:解析出图片地址
#匹配整个页面中的图片标签
ex = '<div class="box picblock col3".*?<img src2="(.*?)" alt.*?</div>'
#匹配图片路径
img_src = re.findall(ex,page_text,re.S)
for src in img_src:
    src = 'https:'+src
    #只有获取到图片地址才用content
    img_data = requests.get(url=src,headers=headers).content
    img_name = src.split('/')[-1]
    img_path = dirName+'/'+img_name
    with open(img_path,'wb') as fp:
        fp.write(img_data)
    print(img_name,'下载完毕!')

数据解析的通用原理

html负责展示数据.
html展示的数据是存储在哪里?
	html的标签
	标签的属性
数据解析的通用原理
	标签的定位
	提取数据

!ipconfig

bs4

环境安装:pip install bs4,pip install lxml

bs4独有的解析原理

1 实例化一个BeautifulSoup的对象,把即将被解析的页面源码数据加载到该对象中
2 调用该对象的相关方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值