1-1 python爬虫练习 爬取百度图片

(效果可以爬取一面的,爬取任意的见这个

  1. 观察获取图片的规律
  2. 获取网页源码
  3. 解析网页源码,获得图片的name与url
import re
import requests
import os
import time
import random

#创建文件夹函数
def mkdir(path):
    folder = os.path.exists(path)
    if not folder:
        os.mkdir(path)
        print("文件夹建立成功")
    else:
        print("已存在这个文件夹")
# keyword = input("输入检索内容:\n")
keyword = '哈利波特'

file_path = "./"+keyword+'img/'
mkdir(file_path)
url ='https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1616736717041_R&pv=&ic=0&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word='
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
}
resp = requests.get(url = (url+keyword), headers=headers)
soure_code_web = resp.content.decode('utf-8')

#制定正则解析规则, 将其编译结果存入re_obj中,提高效率
re_obj = re.compile(r'"fromPageTitle":"(?P<title>.*?)".*?"thumbURL":"(?P<url_img>.*?)"',re.S)
#从网页源码中, 按照指定规则 获取迭代器
iter =  re_obj.finditer(soure_code_web)
#遍历迭代器中的内容
for it in iter:
    title= it.group("title")
    #真正的title
    title = re.search(r'(?P<name1>.*?)<.*>(?P<name2>.*)', it.group("title"))
    if title is not None:
        title = (title.group("name1")+title.group("name2"))
    else:
        title = (it.group("title"))
    #为了满足文件命名的规则, 将非法字符替换为下划线
    title = re.sub(r'[\\/?、*<>|]',"_",title)
    #得到图片的url, 将url响应的二进制内容写入文件中,
    url_img =  it.group("url_img")
    url_img_resp = requests.get(url=url_img,headers=headers)
    with open(file=file_path+title+'.jpg',mode='wb') as fp:
        fp.write(url_img_resp.content)
        print(title+".jpg下载完成")
        #随机休眠, 防止被检测
        time.sleep(random.uniform(0.3,1.2))
print("done")


  1. 在这里插入图片描述
    如果要指定搜索内容,尝试一下可以发现,修改word=<关键词>即可
  2. 如果直接requests请求url,会被检测到,需要添加headers,至少添加两部分在这里插入图片描述
  3. 获取到网页源代码后分析,按下f12 然后将光标指向某一图片,发现它的url如下,复制这个url,在网页源码里寻找,然后可以找到图片的url和名称。

在这里插入图片描述
在这里插入图片描述
4. 指定正则规则,获取这两部分内容在这里插入图片描述
5.获取图片名字发现,名字里有《strong》.*?《/strong》在这里插入图片描述
去掉,name1这部分可能会有内容,name2这里也是。如果< . * ? >根本就没检测到,经过正则表达式处理,结果为空。因此分情况处理。为空的话,说明名字已经符合规则了,不为空的话,就把name1和name2拼接起来。在这里插入图片描述
6. 最后因为名字是一个文件的名字,所以要符合起名规则。在这里插入图片描述
所以用re.sub这个方法替换这些。
7. 最后,再次请求url响应,把二进制内容存放进文件即可。在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值