上期我们讲到正则表达式的用法,知道所有的字符都可以用 .*? 来表示,下面让我们来真正使用它吧。本文一些知识类说明截取该博主的文章, Python爬虫入门教程!手把手教会你爬取网页数据_python爬虫教程_计算机视觉农民工的博客-CSDN博客
一:爬虫的概念
(一)、概念
爬虫就是自动获取网页内容的程序,例如搜索引擎,Google,Baidu 等,每天都运行着庞大的爬虫系统,从全世界的网站中爬虫数据,供用户检索时使用。
(二)、流程
爬虫的流程简要介绍就是
-------模拟请求网页。模拟浏览器,打开目标网站。
-------获取数据。打开网站之后,就可以自动化的获取我们所需要的网站数据。
-------保存数据。拿到数据之后,需要持久化到本地文件或者数据库等存储设备中。
(三)、库的使用
那么我们该如何使用 Python 来编写自己的爬虫程序呢,在这里我要重点介绍一个 Python 库:Requests。
Requests 使用
Requests 库是 Python 中发起 HTTP 请求的库,使用非常方便简单。
模拟发送 HTTP 请求
发送 GET 请求
当我们用浏览器打开百度首页时,其实发送的最原始的请求就是 GET 请求
二:如何爬图片
现在我们就来爬可莉
(一)、导库
# 爬图片 正则表达式 requests用法 爬视频
# 1.导库
from wsgiref import headers
import requests
import re
(二)、先把基本框架搭好
这个是框架先给出来,后面我们一个一个分析
1、获取网站源码:
# 获取网站源码
def get_html(url, headers):
response = requests.get(url, headers=headers)
response.encoding = "utf_8"
return response.text
# if response.status_code == 200:
# else:
# print("获取源码失败")
2、调用源码
# 定义main函数调用get_html源码
def main():
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8759404115215997721&ipn=rj&ct=201326592&is=&fp=result&fr=ala&word=%E5%8F%AF%E8%8E%89&queryWord=%E5%8F%AF%E8%8E%89&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1696485163125="
headers = {
}
params = {}
html = get_html(url, headers)
print(html)
其中url中的内容就是我们从百度中获取的链接。
3、从网页中获取数据
①接下来我们打开浏览器,Edge / 谷歌都可以
②我们进入浏览器搜索百度网页进去,记住一定是百度网页。
进去之后我们先点击ALL也就是全部,然后刷新一下,鼠标向上滑,滑到最顶端,也就是index开头,点击它。
Ⅰ点击标头/Headers,复制URL中的链接(这里留意一下你的url是大写还是小写,后面如果代码运行不了就看看是否大小写出了问题),将链接复制到我们写的main函数中。
Ⅱ注意:复制下面那个请求标头里全部内容到headers中,在粘贴是在前面加上三对双引号,可以避免粘贴时出现大量错误。前面都加上双引号,每句最后加上逗号,有双引号语句就加单引号。(其实就是注释掉)注意格式,python很注意格式。例如下面这样
# 定义main函数调用get_html源码
def main():
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8759404115215997721&ipn=rj&ct=201326592&is=&fp=result&fr=ala&word=%E5%8F%AF%E8%8E%89&queryWord=%E5%8F%AF%E8%8E%89&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1696485163125="
headers = {
"Accept":"text/plain, */*; q=0.01",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.9",
"Connection":"keep-alive",
"Cookie":"BDqhfp=%E5%8E%9F%E7%A5%9E%E5%8F%AF%E8%8E%89%E5%9B%BE%E7%89%87%26%26NaN-1undefined%26%263876%26%266; BIDUPSID=C4A8B9F9C3B27145F94A0A46256A57BE; PSTM=1678688920; ZFY=g2bnFepdt3:AAlVQAVs1fFvpbAU1SIYFwyCnF2Q5bMeo:C; __bid_n=188940fe9cb638ca9d4207; FPTOKEN=ziX5y/CNOyyfQHXZkteEDKG1fLRFjOG9t3E3jcToUXM1qFTS0EJFkz9BDEwR5Ph7g0EJzZkKn5Tbefp2ZhcdKoulr9cBpJtD9fw2SdB70H3YaMXplX7NugPxJNh8Fz/yQylF9ari76mK1GHCJaRF7vdYoZmrS1AvqWu7IAoO99DZt6CZ82VhG4Wy9W1B6QmDqnAVYTQLmnQ46PWgEJxgynWC2YFkdBJT1Elg8WflDkmxs/U+rqrIt/vgTQuNi1UyZzCJBEnd1qnd8i//PeJ2cSnqZvaYONGcQWV8+rsEe9EyjuCudeVPskNUOc6S10Vqmmp/o5wEtqTxaMYkr9SrEEy9aPTZifZUMSQqDtdalstawtZCY5tiR39qHe+S5A84zxl/4llNRqeUuHUEv0Z7CA==|binE0C1sEfvZr+OZz+/kbMFDuPS2ivRhYhWaOM9p6k0=|10|a00a66977e6b2fee93c554d192a03a8e; BAIDUID=C9052A101E56BDC2247A946A62B8565B:FG=1; BAIDUID_BFESS=C9052A101E56BDC2247A946A62B8565B:FG=1; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; userFrom=null; ab_sr=1.0.1_YmE4ZTAwZmUxYjYzZGQwN2ZjYTZlYTJkYjE1N2NjYjNjODI2Yjc2NDAwOWIwNjRjMGMyMDViNTdjN2VjZWMwODFhNDRiMzFmOTlmNzI4MTA0NTgxMjMyNDU5NzVlOTdkN2JhNjRjYzA2OThlNTBmMjA1ODNhNDljYWJjMmNiOTgwZTNjYjE2NWI2YmM2YjQ1NjViNWQyZTM1Njc0NWQxOA==",
"Host":"image.baidu.com",
"Referer":"https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%D4%AD%C9%F1%BF%C9%C0%F2%CD%BC%C6%AC&fr=ala&ala=1&alatpl=normal&pos=0&dyTabStr=MTEsMCwzLDIsMSw2LDQsNSw3LDgsOQ%3D%3D",
"Sec-Ch-Ua":'"Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
"Sec-Ch-Ua-Mobile":"?0",
"Sec-Ch-Ua-Platform":'"Windows"',
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
"X-Requested-With":"XMLHttpRequest",
}
③接下来我们解析出所有的缩略图URL,并用正则表达式来匹配其中的url,按原路返回。
# 从给定的HTML字符串中解析出所有的缩略图URL
def parse_pic_url(html):
result = re.findall('thumbURL":"(.*?)"', html, re.S)
return result
④之后我们获取图片的二进制源码
# 获取图片的二进制源码
def get_pic_content(url):
response = requests.get(url)
# 设置源代码的编码方式
return response.content
⑤
# 调用html函数 result 解析HTML文档并从中提取出图片的URL。
html = get_html(url, headers)
result = parse_pic_url(html)
pic_name = 0
⑥现在我们将图片保存到本地
# 保存图片
def save_pic(content, pic_name):
with open("可莉/" + str(pic_name) + ".jpg", "wb") as f:
f.write(content)
f.close()
⑦再次打开刚才的网页
找到Fetch,鼠标向下滑图片,会看到刷新点acjson数据,如果刷不出来多试几次,网速问题。
⑧随便点进去一个,找到payload复制所有内容到我们刚才打代码中,如图:
注意删除那些冒号后没有内容的句子,和上面一样加上冒号,逗号。
params = {
" tn":" resultjson_com",
"logid":" 8759404115215997721",
"ipn": "rj",
" ct": "201326592",
"fp":" result",
"fr": "ala",
"word": "可莉",
"queryWord":" 可莉",
"cl": "2",
"lm": "-1",
"ie":" utf - 8",
"oe": "utf - 8",
"pn": "30",
"rn":" 30",
"gsm":"1e",
}
结尾。记得在python里新建一个文件夹放图片
# 爬图片 正则表达式 requests用法 爬视频
# 1.导库
import os
from wsgiref import headers
import requests
import re
# 获取网站源码
def get_html(url, headers):
response = requests.get(url, headers=headers)
response.encoding = "utf_8"
return response.text
# if response.status_code == 200:
# else:
# print("获取源码失败")
# 从给定的HTML字符串中解析出所有的缩略图URL
def parse_pic_url(html):
result = re.findall('thumbURL":"(.*?)"', html, re.S)
return result
# 获取图片的二进制源码
def get_pic_content(url):
response = requests.get(url)
# 设置源代码的编码方式
return response.content
# 定义一个新建文件夹程序
def create_fold(fold_name):
# 加异常处理
try:
os.mkdir(fold_name)
except:
print("文件夹已存在")
# 保存图片
def save_pic(fold_name,content, pic_name):
with open("可莉/" + str(pic_name) + ".jpg", "wb") as f:
f.write(content)
f.close()
# 定义main函数调用get_html源码
def main():
# 输入文件夹的名字
fold_name = input("请输入您要抓取图片的名字")
# 输入要抓取的图片页数
page_num = input("请输入要抓取多少页?(0,1,2,3,4,......)")
# 调用函数 创建文件夹
create_fold(fold_name)
# 定义图片名字
pic_name = 0
# 构建循环 控制页面 1页30张 3页90张
# 让它自己选择
for i in range(int(page_num)):
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8759404115215997721&ipn=rj&ct=201326592&is=&fp=result&fr=ala&word=%E5%8F%AF%E8%8E%89&queryWord=%E5%8F%AF%E8%8E%89&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1696485163125="
headers = {
"Accept":"text/plain, */*; q=0.01",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.9",
"Connection":"keep-alive",
"Cookie":"BDqhfp=%E5%8E%9F%E7%A5%9E%E5%8F%AF%E8%8E%89%E5%9B%BE%E7%89%87%26%26NaN-1undefined%26%263876%26%266; BIDUPSID=C4A8B9F9C3B27145F94A0A46256A57BE; PSTM=1678688920; ZFY=g2bnFepdt3:AAlVQAVs1fFvpbAU1SIYFwyCnF2Q5bMeo:C; __bid_n=188940fe9cb638ca9d4207; FPTOKEN=ziX5y/CNOyyfQHXZkteEDKG1fLRFjOG9t3E3jcToUXM1qFTS0EJFkz9BDEwR5Ph7g0EJzZkKn5Tbefp2ZhcdKoulr9cBpJtD9fw2SdB70H3YaMXplX7NugPxJNh8Fz/yQylF9ari76mK1GHCJaRF7vdYoZmrS1AvqWu7IAoO99DZt6CZ82VhG4Wy9W1B6QmDqnAVYTQLmnQ46PWgEJxgynWC2YFkdBJT1Elg8WflDkmxs/U+rqrIt/vgTQuNi1UyZzCJBEnd1qnd8i//PeJ2cSnqZvaYONGcQWV8+rsEe9EyjuCudeVPskNUOc6S10Vqmmp/o5wEtqTxaMYkr9SrEEy9aPTZifZUMSQqDtdalstawtZCY5tiR39qHe+S5A84zxl/4llNRqeUuHUEv0Z7CA==|binE0C1sEfvZr+OZz+/kbMFDuPS2ivRhYhWaOM9p6k0=|10|a00a66977e6b2fee93c554d192a03a8e; BAIDUID=C9052A101E56BDC2247A946A62B8565B:FG=1; BAIDUID_BFESS=C9052A101E56BDC2247A946A62B8565B:FG=1; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; userFrom=null; ab_sr=1.0.1_YmE4ZTAwZmUxYjYzZGQwN2ZjYTZlYTJkYjE1N2NjYjNjODI2Yjc2NDAwOWIwNjRjMGMyMDViNTdjN2VjZWMwODFhNDRiMzFmOTlmNzI4MTA0NTgxMjMyNDU5NzVlOTdkN2JhNjRjYzA2OThlNTBmMjA1ODNhNDljYWJjMmNiOTgwZTNjYjE2NWI2YmM2YjQ1NjViNWQyZTM1Njc0NWQxOA==",
"Host":"image.baidu.com",
"Referer":"https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%D4%AD%C9%F1%BF%C9%C0%F2%CD%BC%C6%AC&fr=ala&ala=1&alatpl=normal&pos=0&dyTabStr=MTEsMCwzLDIsMSw2LDQsNSw3LDgsOQ%3D%3D",
"Sec-Ch-Ua":'"Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
"Sec-Ch-Ua-Mobile":"?0",
"Sec-Ch-Ua-Platform":'"Windows"',
"Sec-Fetch-Dest":"empty",
"Sec-Fetch-Mode":"cors",
"Sec-Fetch-Site":"same-origin",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36",
"X-Requested-With":"XMLHttpRequest",
}
params = {
" tn":" resultjson_com",
"logid":" 8759404115215997721",
"ipn": "rj",
" ct": "201326592",
"fp":" result",
"fr": "ala",
"word": "可莉",
"queryWord":" 可莉",
"cl": "2",
"lm": "-1",
"ie":" utf - 8",
"oe": "utf - 8",
"pn": str(int(i + 1) * 30),
"rn":" 30",
"gsm":"1e",
}
# 调用html函数 result 解析HTML文档并从中提取出图片的URL。
# 打印一条提示信息,显示正在保存第几张图片
html = get_html(url, headers)
result = parse_pic_url(html)
pic_name = 0
# 使用for循环遍历列表
for item in result:
# print(item)
# 调用函数获取二进制源码
pic_content = get_pic_content(item)
# 调用函数保存图片
save_pic(pic_content, pic_name)
pic_name += 1
print("正在保存" + str(pic_name) + " 张图片")
# 执行main函数
if __name__ == '__main__':
main()
这是运行效果,我搜的大熊猫
好了结束了,谢谢观看