python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python爬虫遇到403错误

python爬虫遇到403错误的问题及解决

作者:carry_1024

这篇文章主要介绍了python爬虫遇到403错误的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python爬虫遇到403错误

这段时间我很想去p站爬一爬,之前有试过,但都失败了,有一次用phantomJS尝试,结果卡死在登录页面,太复杂了。

有一次卡死在编码上,一直无法获取到页面。

这次是卡死在403上,我获取了图片的链接,正要下载时弹出403错误,图片在浏览器上也打不开,我还以为是网站把我的ip封掉了,就放弃了,后来听一位大神说,有的时候需要向网页发送一些请求头吃才能下载东西(我是第一次听说urllib.request.urltrieve也能添加请求头)真是长见识了。

经过自己的摸索,发现在p站下载高清大图需要给服务器发送一个”Referer”参数,用来告诉服务器你是从哪个网址进入图片链接的。

而且p站的图片页没有单独的json文件加载,它的json数据全存在html文件里,真是见了鬼(我还以为那段代码是乱码)。

p站还是牛逼啊,我大概花了两天时间才搞懂这些。

代码:

import urllib.request
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://i.pximg.net/img-original/img/2016/12/25/05/10/36/60541651_p0.jpg"

opener = urllib.request.build_opener()
opener.addheaders=[('Referer', "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=60541651")]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(url,"E://miku.jpg")

python爬虫代码错误的解决

在做数据抓取的时候经常会遇到各种各样的问题,这些问题就是新手小白经常会遇到的代码问题。

1、爬取https的网站或是接口的时候,如果是不受信用的SSL证书,会报错,需要添加如下代码

如下代码可以保证当前代码块内所有的请求都自动屏蔽ssl证书问题:

import ssl   # 这个是爬取https的链接需要的,以及下面一行代码
ssl._create_default_https_context = ssl._create_unverified_context

2、爬取jsonp的接口,返回的数据需要删除callback名字和最外层括号,可以通过以下方式过滤:

text方法将取得的数据转为文本,然后re.match将字符串过滤掉callback名字和最外层括号,留下原本json部分的数据,然后通过json.loads将过滤出来的json转为python对象

import re
getOneSongInfoCallback=json.loads(re.match(".*?({.*}).*", requests.get(url, headers=headers).text)[1])

3、获取请求的地址后面跟的参数的方法,如下方式得到qs就可以进一步直接获取自己想要的参数值:

import urllib.parse as parse
parse_query=parse.urlparse(url).query
qs=parse.parse_qs(parse_query)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文