一个简单的pathon 爬取图片代码。
总结遇到的问题:
1.爬取网站代码遇到代码爬取不到该网站设置反扒
解决:修改 User-Agent 默认显示的是python
修改可以复制你访问网址的,如何找到往下看,复制那个即可
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}
2.爬取到的网页源代码中文全部乱码,如图
设置一下爬取到的数据的编码即可
response.text.encode(response.encoding).decode('utf-8')
3.爬取为空
原因可能是在正则表达式解析网页那块,需要分析爬取的结构,完整的对比
这里我爬取不到,原因是
多了空格,而爬取到的数据里面没有空格。注:匹配这里最好看爬取后的html,在里面找正则匹配的标签,因为在网页源代码看到的和爬取到的结构些许不同,爬取到的会把结构加一些空格,导致你匹配不到数据。
4.保存图片时报错
该问题原因是我爬取的图片路径该网站没有设置http导致python无法请求到有效地址,需要手动添加一下即可
#循环爬取的url 挨个添加一下就好了
url = 'http:'+url
import requests
import re
import os
import time
url = "https://www.woyaogexing.com/tupian/mingxing/2018/41351.html"
# 遇到反扒需要设置
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win32; x32) AppleWebKit/588.6 (KHTML, like Gecko) Chrome/15.0.4007.15 Safari/537.36'}
# 修改自己身份
response = requests.get(url,headers=headers)
#.encode(response.encoding).decode('utf-8') 中文乱码解决
html = response.text.encode(response.encoding).decode('utf-8')
print(html)
""" 解析网页"""
dir_name = re.findall('<div class="pifutitle"><h1>(.*?)</h1></div>',html)[0]# 文件名
print(dir_name)
if not os.path.exists(dir_name): #判断是否有当前文件夹 否则创建
os.mkdir(dir_name)
urls = re.findall('<img class="lazy" src="(.*?)"/>',html) # 正则表达式解析网页
# <img class="lazy" src="//img2.woyaogexing.com/2018/07/02/c0ddb88553a24141a7b471cae28967d8!600x600.jpeg"/>
"""保存图片"""
for url in urls:
time.sleep(1) #延迟一秒
file_name = url.split('/')[-1]
new_url = 'http:'+url
response = requests.get(new_url,headers=headers) # 请求地址必须http 没有就会报错
with open(dir_name + '/' +file_name,'wb') as f:
f.write(response.content)