python3 HTTP Error 403:Forbidden

news/2024/7/19 9:27:06 标签: python, 爬虫

问题描述
初学python,在用python中的urllib.request.urlopen()和urllib.request.urlretrieve方法打开网页时,有些网站会抛出异常: HTTP Error 403:Forbidden

问题原因
网站对爬虫的操作进行了限制

解决方法
伪装成浏览器,

headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'}
req=urllib.request.Request(url=target_url,headers=headers) 
urllib.request.urlopen(req).read()
import urllib.request
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve("type URL here", "path/file_name")

基础用法如下:

1.urlopen()方法
urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。
参数url表示远程数据的路径,一般是网址;
参数data表示以post方式提交到url的数据(玩过web的人应该知道提交数据的两种方式:post与get。如果你不清楚,也不必太在意,一般情况下很少用到这个参数);
参数proxies用于设置代理。
urlopen返回 一个类文件对象,它提供了如下方法:
read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;
info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息
getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
geturl():返回请求的url;

import urllib
url = "http://www.baidu.com/"
#urlopen()
sock = urllib.urlopen(url)
htmlCode = sock.read()
sock.close
fp = open("e:/1.html","wb")
fp.write(htmlCode)
fp.close
#urlretrieve()
urllib.urlretrieve(url, 'e:/2.html')

2.urlretrieve方法
直接将远程数据下载到本地。

urllib.urlretrieve(url[, filename[, reporthook[, data]]])
参数说明:
url:外部或者本地url
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。
下面通过例子来演示一下这个方法的使用,这个例子将新浪首页的html抓取到本地,保存在D:/sina.html文件中,同时显示下载的进度。

import urllib
def callbackfunc(blocknum, blocksize, totalsize):
    '''回调函数
    @blocknum: 已经下载的数据块
    @blocksize: 数据块的大小
    @totalsize: 远程文件的大小
    '''
    percent = 100.0 * blocknum * blocksize / totalsize
    if percent > 100:
        percent = 100
    print "%.2f%%"% percent
url = 'http://www.sina.com.cn'
local = 'd:\\sina.html'
urllib.urlretrieve(url, local, callbackfunc)

 


 

转载于:https://www.cnblogs.com/majiang/p/9843775.html


http://www.niftyadmin.cn/n/1050469.html

相关文章

帝国系统提交熊掌号php文件,帝国CMS百度主动提交URL和熊掌号修改方法

帝国CMS百度主动提交URL和熊掌号修改方法,首先打开ecmsinfo.php,添加以下代码elseif($enews "Post_Baidu_sitemap") //文章实时发送百度{$id $_POST[id];$urls $_POST[titleurl];ePostBaiduSitemap($id, $urls);}elseif($enews "Post…

一个三维装箱问题的搜索树算法

三维装箱问题的业务场景可以参考电商业务中的纸箱推荐问题. 文中考虑了如下问题. 输入 : 长宽高为(L,W,H)(L, W, H)(L,W,H)的箱子和nnn个物品, 其长宽高为(li,wi,hi)(l_i, w_i, h_i)(li​,wi​,hi​), i1,2,…,ni1,2,\ldots,ni1,2,…,n. 假设物品是长方体, 长度不可变(没有弹性…

CSCI 1133 CSCI 1133, Fall 2018 Programming Examination

代写CSCI 1133作业、代做Python编程作业、代写GitHub作业、代做Python程序设计作业CSCI 1133, Fall 2018 Programming Examination 1Wheel of Fortune!100 ptsPart 1 Due: 5:00 pm, Friday, Oct 19Part 2 Due: 5:00 pm, Friday, Oct 26PLEASE NOTE: This is a graded assessmen…

【Linux 进程】之关于父子进程之间的数据共享分析

之前我们通过fork()函数,得知了父子进程之间的存在着代码的拷贝,且父子进程都相互独立执行,那么父子进程是否共享同一段数据,即是否存在着数据共享。接下来我们就来分析分析父子进程是否存在着数据共享。我们都知道,在…

PHP和R语言交互,使用R语言绘制各种好玩的交互图

最近做数据分析时,入坑了R语言,画了一些感觉很有趣的交互图,现在把它分享出来,方便大家参考,毕竟独乐乐不如众乐乐。在此做个记录,也方便日后自己查找!1.云图-----显示的是我本地数据库所有新闻…

团队作业——第三周(菜就完事了队)需求改进和系统分析

1.需求&原型改进 原需求:http://www.cnblogs.com/QQ760710450/p/9815779.html 需求改进: 基础需求: 1.实现基本的相同相消功能 2.实现程序执行的窗口化界面 3.实现自动生成不同关卡功能 这是实现最基本的需求,也是作为连连看小…

ubuntu建立软ap共享无线网络

建立ad-hoc模式共享网络 viewtopic.php?f116&t387194有些android手机可能不支持ad-hoc模式,要第三方rom才行。首先安装这些工具代码:apt-get install wireless_tools iw dnsmasq我也不知有用没用,反正可以杜绝开头出错运行代码:iw list看这一段有没…

在线资料和工具

统计/预测 课程 - STAT 501 - Regression Methods 课程 - STAT 510 - Applied Time Series Analysis 教材 - Forecasting: Principles and Practice 算法 CS 168: The Modern Algorithmic Toolbox ORIE 6300: Mathematical Programming I 机器学习 Machine Learning - …