本文共 1830 字,大约阅读时间需要 6 分钟。
import requests# 目标网站url = 'https://baijiahao.baidu.com/s?id=1687278509395553439&wfr=spider&for=pc'# 头部伪装headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/ Firefox/84.0'}# 发出请求f = requests.get(url, headers=headers) # 从网页获取html内容print(f.text) # 打印网页返回数据print(f)
运行结果:
根据print(f)中的返回值来判定是否爬取成功,为200时表示网页有相应,爬取成功,为403或者其他则表示不成功,可能时网站具有反爬机制。
html = f.texttitle = re.findall('(.*?) ', html)[0] # 文章标题urls = re.findall('', html) # 图片网址print(title)print(urls)
运行效果:
在这里使用的是正则表达式,首先需要先找到图片的网址,检索网页(在网页源代码中进行找正则表达式),然后进行匹配找到相应的区域段,而后将需要的部分改成(.*?),不需要的部分改成 .? 不加括号。如程序中的re.findall()中所示。
如果在print(urls)时,出现的结果为 [] ,则表示未能匹配到内容,一般而言是正则出现了问题。在当前目录下创建文件夹,使用 os.mkdir() 函数
dir_name = './download/images'if not os.path.exists(dir_name): # 创建文件夹 os.mkdir(dir_name)
保存图片:
for ur in urls: time.sleep(1) img_content = requests.get(ur, headers=headers) with open(dir_name + '/%s.png' % title, 'wb') as f: f.write(img_content.content)
运行效果:
建议加上time.sleep()函数,如果访问过于频繁可能会被识别出。此处使用 ‘wb ’的二进制形式写入。
全部代码:
import requestsimport reimport timeimport os# 目标网站url = 'https://baijiahao.baidu.com/s?id=1687278509395553439&wfr=spider&for=pc'# 头部伪装headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/ Firefox/84.0'}# 发出请求f = requests.get(url, headers=headers) # 从网页获取html内容# print(f.text) # 打印网页返回数据print(f)html = f.texttitle = re.findall('(.*?) ', html)[0] # 文章标题urls = re.findall('', html) # 图片网址print(title)print(urls)dir_name = './download/images'if not os.path.exists(dir_name): # 创建文件夹 os.mkdir(dir_name)for ur in urls: time.sleep(1) img_content = requests.get(ur, headers=headers) with open(dir_name + '/%s.png' % title, 'wb') as f: f.write(img_content.content)
转载地址:http://pthh.baihongyu.com/