爬虫遇到HTTP Error 403的问题
# coding=gbk
from bs4 import BeautifulSoup
import requests
import urllib
x = 1
y = 1
def crawl(url):
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
global y
with open(f'F:/pachong/xnt/{y}.txt','w',encoding="utf-8") as f:
f.write(str(soup))
y += 1
yinhuns = soup.select('img')
print(yinhuns)
for yh in yinhuns:
print(yh)
link = yh.get('src')
print(link)
global x
urllib.request.urlretrieve(link, f'F:/pachong/xnt/{x}.jpg')
print(f'正在下载第{x}张图片')
x += 1
for i in range(1,5):
url = "https://acg.fi/hentai/23643.htm/" + str(i)
try:
crawl(url)
except ValueError as f:
continue
except Exception as e:
print(e)
- 运行程序过程中返回下面结果
<img alt="A区(ACG.Fi)" class="logo" src="https://acg.fi/logo.png"/>
https://acg.fi/logo.png
HTTP Error 403: Forbidden
问题有三个
- 搜索src值的时候,没有搜索到全部符合要找的图片网址
- 返回的第一个网址出现了403错误,拒绝访问
- soup.select返回的不是正确的list
思考
- 有可能所要找的网址中包含中文,无法编译
- 如果通过正则对,请求的url的text进行,筛选
#coding=gbk
from bs4 import BeautifulSoup
import requests
import urllib
x = 1
def crawl(url, header):
res = requests.get(url, headers=header)
soup = BeautifulSoup(res.text, 'html.parser')
yinhuns = soup.find('div', attrs = {'id':"content-innerText"}).find_all('img',limit=4)
print(yinhuns)
for yh in yinhuns:
link = yh.get('src')
global x
print(x)
urllib.request.urlretrieve(link, 'F:/pachong/xnt/{}.jpg'.format(x))
print('正在下载第{0}张图片'.format(x))
x += 1
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"
}
for i in range(1,5):
url = "https://acg.fi/hentai/23643.htm/" + str(i)
try:
crawl(url, header)
except ValueError as f:
continue
except Exception as e:
print(e)
- 这个过程用了find(),find_all()方法,依旧没有解决list的问题
- 后续过程使用urllib.parse.quote对中文部分重新编码,但是urllib.request.urlretrieve依然报错
- 重新修改后
#coding=gbk
import requests
import urllib
import re
from PIL import Image
from io import BytesIO
x = 1
# 获取抓取的图片源网址
def crawl(url, header):
res = requests.get(url, headers=header)
# 防止被反爬,打开后关闭
res.close()
res = res.text
pattern = re.compile('http.*?apic.*?jpg')
result = re.findall(pattern, res)
return result
# 对重编码的网址下载图片
def down(outs, folder_path):
global x
for out in outs:
# 获取新编码的URL地址
res = requests.get(out)
# 防止被反爬,打开后关闭
res.close()
bf = BytesIO()
bf.write(res.content)
img = Image.open(bf)
print(f'正在下载第{x}张图片')
img.save(folder_path + f"{x}.jpg")
x += 1
# 对获取的图片源网址进行重编码
def bianma(results):
outs = []
for s in results:
# 用正则筛选出中文部分
pattern = re.compile('[\u4e00-\u9fa5]+')
result = re.search(pattern, s)
su = result.group(0)
# 把中文部分重洗编码
li = urllib.parse.quote(su)
# 把原URL地址中文部分替换成编码后的
out = re.sub(pattern, li, s)
outs.append(out)
# 对列表进行去重并且按照原来的次序排列
outs_cp = sorted(set(outs), key=outs.index)
return outs_cp
def main():
try:
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"
}
folder_path = 'F:/pachong/xnt/'
for i in range(1,5):
url = "https://acg.fi/hentai/23643.htm/" + str(i)
results = crawl(url, header)
outs = bianma(results)
down(outs, folder_path)
except Exception as e:
print(e)
if __name__ == '__main__':
main()
- 对于图片路径中有中文的,可以使用BytesIO和PIL下载图片,证实可以有效解决
- 几次试验出现[Errno 10054] 远程主机强迫关闭了一个现有的连接,可以在requests.get()后使用close()
- 程序运行无误,就是有点慢,后期可以使用多线程尝试
爬虫遇到HTTP Error 403的问题的更多相关文章
- HTTP Error 403没有了,但是中文全都是乱码。又是怎么回事?
首先是简单的网页抓取程序: [python] import sys, urllib2req = urllib2.Request("http://blog.csdn.net/nevasun&q ...
- urllib.error.HTTPError: HTTP Error 403: Forbidden
问题: urllib.request.urlopen() 方法经常会被用来打开一个网页的源代码,然后会去分析这个页面源代码,但是对于有的网站使用这种方法时会抛出"HTTP Error 40 ...
- python3 HTTP Error 403:Forbidden
问题描述初学python,在用python中的urllib.request.urlopen()和urllib.request.urlretrieve方法打开网页时,有些网站会抛出异常: HTTP Er ...
- Python "HTTP Error 403: Forbidden"
问题: 执行下面的语句时 def set_IPlsit(): url = 'https://www.whatismyip.com/' response = urllib.request.urlopen ...
- python抓取不得姐动图(报错 urllib.error.HTTPError: HTTP Error 403: Forbidden)
抓取不得姐动图(报错) # -*- coding:utf-8 -*- #__author__ :kusy #__content__:文件说明 #__date__:2018/7/23 17:01 imp ...
- asp.net mvc4 HTTP Error 403.14
asp.net mvc4项目部署到II&上时,出现HTTP Error 403.14 - Forbidden - The Web server is configured to not lis ...
- 解决github push错误The requested URL returned error: 403 Forbidden while accessing
来源:http://blog.csdn.net/happyteafriends/article/details/11554043 github push错误: git push error: The ...
- 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing
git提交代码时,出现这个错误"error: The requested URL returned error: 403 Forbidden while accessing https&qu ...
- PYCURL ERROR 22 - "The requested URL returned error: 403 Forbidden"
RHEL6.5创建本地Yum源后,发现不可用,报错如下: [root@namenode1 html]# yum install gcc Loaded plugins: product-id, refr ...
随机推荐
- java反射机制基础总结
1反射机制是啥? 反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息. 2反射机制有啥用? Reflection(反射) ...
- 剑指Offer的学习笔记(C#篇)-- 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 一 . 题目该怎么想 1 . 定义栈的数据结构:实现Push.Pop.Top.Min方 ...
- 输入apt-get update时出现Could not open lock file /var/lib/apt/lists/lock - open
我看了其它的资料发现不够清楚 我只报这些错误 1.1.ps-aux 查出apt-get进程的PID,通常是一个四位数字. 不好找apt-get进程 输入此代码就好找了 ps -aux|grep apt ...
- linux bg和fg命令
linux下我们如果想一个任务或者程序还后台执行可以使用&,实际上linux还提供了其他任务调度的命令. bg将一个在后台暂停的命令,变成继续执行 fg将后台中的命令调至前台继续运行 jobs ...
- 初探 Nginx 架构
转载自:http://wiki.jikexueyuan.com/project/nginx/nginx-framework.html Nginx 在启动后,在 unix 系统中会以 daemon 的方 ...
- STP-12-MST工作原理
MST将网络划分为一或多个区域.一个MST区域是一组以相同方式共同使用MST的交换机——除了其他特性外,它们运行相同数量的MST实例,并在这些实例上映射相同的VLAN集合. 例如,在下图中,工程师定义 ...
- 爬虫(GET)——handler处理器和自定义opener
工具:python3 解释:urlopen()不支持代理.cookie等其他的http/https高级功能,所以需要handler处理器创建特定功能的处理器对象,urllib.request.buli ...
- cordova开发的坑
相机 根据android版本,有各种问题. 1.拍照后不会自动清内存造成内存溢出,导致照片不会自动旋转,拍多张之后会自动刷新网页. 2.小米手机安卓7.0时,拍出的照片不会自动旋转,需要安卓端代码调整 ...
- nodejs 实践:express 最佳实践 (一) 项目结构
express 最佳实践 (一) 第二篇: express 最佳实践(二):中间件 最近,一直在使用 nodejs 做项目,对 nodejs 开发可以说深有体会. 先说说 nodejs 在业务中的脚色 ...
- 3.Freshman阶段学习内容的确定
我刷知乎.在知乎上答题的程序员,不是很牛逼就是更牛逼,说起各种系统.各种系统的各种版本.各种语言.数据库.算法.IT届的各种圣战都有板有眼.信手拈来.头头是道,不得不服.这导致了一些非常严重的问题:我 ...