仅作为记录,大佬请跳过。
1 引入包
import re # re模块主要包含了正则表达式
import urllib.request
2 爬虫设置
2.1 设置headers
用于假装用户,使得爬虫被计算机认为是人的操作
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'}
2.2 设置网址
url="https://tieba.baidu.com/f?ie=utf-8&kw=%E7%8C%AB%E5%9B%BE&fr=search"
2.3 得到地址:“假用户”+网址,用变量page表示
page = urllib.request.Request(url, headers=headers)
2.4 获取地址中的数据
html=urllib.request.urlopen(page).read().decode("utf-8")
此html里面是网址里的所有源代码
3 图片设置
3.1 在网页源码里分析图片部分代码的组成,用reg表示
reg = r'bpic="(.+?\.jpg)" class'
3.2 从地址中的数据(所有源代码),获取所有reg结构
imgre = re.compile(reg) # 先编译一下reg
imglist = re.findall(imgre, html)
imglist储存着所有源代码里符合reg结构的代码
3.3 保存图片
用urllib.request.urlretrieve
x = 0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl, r'E:\python\cat\%s.jpg' % x)
x += 1
分别将imglist里的每个reg图片元素(记为imgurl),保存到本地
所有源代码
import re # re模块主要包含了正则表达式
import urllib.request
from urllib import request # urllib模块提供了读取Web页面数据的接口
# 定义一个getHtml函数
def getHtml(url):
print('start-gethtml')
# page = urllib.request.urlopen(url) # urllib.request.urlopen()方法用于打开一个URL地址
# html = page.read() # read()方法用于读取URL上的数据
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'}
page = urllib.request.Request(url, headers=headers)
# page=requests.get(url, headers=headers)
html=urllib.request.urlopen(page).read().decode("utf-8")
return html
# 图片下载
def getImg(html):
reg = r'bpic="(.+?\.jpg)" class' # 正则表达式,得到图片地址
imgre = re.compile(reg) # re.compile() 可以把正则表达式编译成一个正则表达式对象.
html = html # python3
imglist = re.findall(imgre, html) # re.findall() 方法读取html 中包含 imgre(正则表达式)的数据
# 把筛选的图片地址通过for循环遍历并保存到本地
# 核心是urllib.request.urlretrieve()方法,直接将远程数据下载到本地,图片通过x依次递增命名
x = 0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl, r'E:\python\cat\%s.jpg' % x)
x += 1
if __name__ == '__main__':
html = getHtml("https://tieba.baidu.com/f?ie=utf-8&kw=%E7%8C%AB%E5%9B%BE&fr=search")
print(getImg(html))
展示