python爬取网页报错提示状态码404,可是在浏览器里可以打开网页

qq_23045213 2016-07-18 12:47:45
import urllib.request

url = "http://t.cn/Rq0PezN"

try:

response = urllib.request.urlopen(url)

source = response.geturl()

print(source)

except Exception as e:

request = urllib.request.urlopen(urllib.request.Request(url, headers = {'User-Agent':'Mozilla/8.0 (compatible; MSIE 8.0; Windows 7)'}))

print (request.url)

代码如上 运行后报错:urllib.error.HTTPError: HTTP Error 404: Not Found。

代码是通过短连接获取原链接,可以用浏览器打开这个链接但是却提示状态码404的错误。不知道这个原理是啥,怎样可以解决这个问题呢?
...全文
8969 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ABCFH123 2019-12-30
  • 打赏
  • 举报
回复
引用 2 楼 bwlab 的回复:
request = urllib.request.Request(url,headers=headers) request = urllib.request.urlopen(request) url =request.geturl() 这么写,尽量加个headers,里面把User-Agent写上
没错我是这么写的,但是还是一样报404
moveonzz 2018-10-24
  • 打赏
  • 举报
回复 1
打开你要爬的网站 F12 选择Network 刷新下页面 选中下面的一条 然后找到User-Agent 将他的User-Agent 复制到你的header里 然后试试
hitman.banker 2018-10-23
  • 打赏
  • 举报
回复
你的python发出的HTTP请求和浏览器发出的请求是不一样的,仔细看下哪些地方有差别
simaconghui 2018-10-12
  • 打赏
  • 举报
回复
同样遇到这个问题了,我是对app抓包获得的url,浏览器上能打开,抓取显示404(写了header,报文里没看到cookies),望有人能解答

问题链接 https://ask.csdn.net/questions/702363
Iron.Man 2018-06-17
  • 打赏
  • 举报
回复
忘了告诉你解决办法,你抓包将状态码200的cookie值贴到代码的headers里,然后urlopen(req)过去就ok
Iron.Man 2018-06-17
  • 打赏
  • 举报
回复
这种情况是服务器同时返回200与404的状态码,抓包可以看到有404与200。浏览器访问时,有200不会影响访问,而爬虫程序获取该url的回执状态码404与200,遇到有404,则抛出了HTTP Error 404: Not Found
老哥老哥 2018-01-16
  • 打赏
  • 举报
回复
这tm链接,真的会玩
老哥老哥 2018-01-16
  • 打赏
  • 举报
回复
看样子是GG了
  • 打赏
  • 举报
回复
楼主,问题解决了吗,遇到了同样的问题。
xiaozhanger 2017-09-20
  • 打赏
  • 举报
回复
引用 5 楼 nice_fish 的回复:
把浏览器里面的所有请求头都带上,然后在请求。
以后,所有请求都带上请求头,是个好习惯
yingying0420 2017-08-04
  • 打赏
  • 举报
回复
1.请求头加上 2.看看url地址自己拼接的是不是正确
  • 打赏
  • 举报
回复
把浏览器里面的所有请求头都带上,然后在请求。
PPJER 2016-07-28
  • 打赏
  • 举报
回复
In [1]: import requests In [2]: url = "http://t.cn/Rq0PezN" In [3]: req = requests.get(url) In [4]: print req.url http://www.lkrfj.cn/%E7%9B%B8%E7%89%87.apk
qq_23045213 2016-07-18
  • 打赏
  • 举报
回复
这个链接是个下载链接,这个模块是我们用来识别恶意下载链接的一个模块。浏览器中可以进入下载,但是python获取状态码就是404,为什么会这样。
bwlab 2016-07-18
  • 打赏
  • 举报
回复
这个应该是302状态码的,但是也可能因为是没加User-Agent吧
bwlab 2016-07-18
  • 打赏
  • 举报
回复
request = urllib.request.Request(url,headers=headers) request = urllib.request.urlopen(request) url =request.geturl() 这么写,尽量加个headers,里面把User-Agent写上

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧