精华内容
下载资源
问答
  • data, timeout) File "/usr/lib/python3.4/urllib/request.py", line 469, in open response = meth(req, response) File "/usr/lib/python3.4/urllib/request.py", line 579, in http_response 'http', request, ...

    Hi not every time but sometimes when trying to gain access to the LSE code I am thrown the every annoying HTTP Error 403: Forbidden message.

    Anyone know how I can overcome this issue only using standard python modules (so sadly no beautiful soup).

    import urllib.request

    url = "http://www.londonstockexchange.com/exchange/prices-and-markets/stocks/indices/ftse-indices.html"

    infile = urllib.request.urlopen(url) # Open the URL

    data = infile.read().decode('ISO-8859-1') # Read the content as string decoded with ISO-8859-1

    print(data) # Print the data to the screen

    However every now and then this is the error I am shown:

    Traceback (most recent call last):

    File "/home/ubuntu/workspace/programming_practice/Assessment/Summative/removingThe403Error.py", line 5, in

    webpage = urlopen(req).read().decode('ISO-8859-1')

    File "/usr/lib/python3.4/urllib/request.py", line 161, in urlopen

    return opener.open(url, data, timeout)

    File "/usr/lib/python3.4/urllib/request.py", line 469, in open

    response = meth(req, response)

    File "/usr/lib/python3.4/urllib/request.py", line 579, in http_response

    'http', request, response, code, msg, hdrs)

    File "/usr/lib/python3.4/urllib/request.py", line 507, in error

    return self._call_chain(*args)

    File "/usr/lib/python3.4/urllib/request.py", line 441, in _call_chain

    result = func(*args)

    File "/usr/lib/python3.4/urllib/request.py", line 587, in http_error_default

    raise HTTPError(req.full_url, code, msg, hdrs, fp)

    urllib.error.HTTPError: HTTP Error 403: Forbidden

    Process exited with code: 1

    Link to a list of all the modules that are okay: https://docs.python.org/3.4/py-modindex.html

    Many thanks in advance.

    解决方案

    This is probably due to mod_security. You need to spoof by opening the URL as a browser, not as python urllib.

    Here, I corrected your code:

    import urllib.request

    url = "http://www.londonstockexchange.com/exchange/prices-and-markets/stocks/indices/ftse-indices.html"

    # Open the URL as Browser, not as python urllib

    page=urllib.request.Request(url,headers={'User-Agent': 'Mozilla/5.0'})

    infile=urllib.request.urlopen(page).read()

    data = infile.decode('ISO-8859-1') # Read the content as string decoded with ISO-8859-1

    print(data) # Print the data to the screen

    Next, you can use BeautifulSoup to scrape the HTML.

    展开全文
  • python网络请求四大模块【requests、selenium、urlliburllib3】 1、requests 该模块为python第三方库,需要使用pip安装 安装 pip install requests 使用 import requests url = 'http://www.baidu.com' response ...

    python网络请求四大模块【requests、selenium、urllib、urllib3】

    1、requests

    该模块为python第三方库,需要使用pip安装
    安装

    pip install requests
    

    使用

    import requests
    url = 'http://www.baidu.com'
    response = requests.get(url)#使用get方法发起请求
    # response = requests.post(url) #使用post发起请求
    print(response.status_code) #输出请求状态码
    print(response.content.decode('utf-8')) #输出请求结果
    

    requests的get方法以及其他方法中除了一个必不可少的URL参数可以还可以添加其他的相关参数从而提高爬虫请求的效率
    1、header
    2、cookies
    3、proxies 【IP代理】
    4、params 【请求携带参数】

    import requests
    #使用请求头
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ',
            'Host': 'movie.douban.com',
            'Referer': 'https://movie.douban.com/typerank?', 
    }
    #携带cookies
    cookies = {'Cookie':' bid=vcLghJHKdzE; __utmz=30149280.1608554450.1.1.utmcsr=(direct)|utmccn='}
    #携带请求参数
    params = {
                'type':'11',
                'interval_id':'100:90',
                'action':'unwatched+playable',
                'start':str(i*20),
                'limit':'20',
        }
    #设置代理池 ip
    proxy = {
        'http':'101.236.155.89:8899',
        'https':'101.236.155.89:7799'
    }
    url = 'https://movie.douban.com/j/chart/top_list?'
    
    res=requests.get(url,headers=headers,params=params,cookies=cookies,proxies=proxy)
    print(response.status_code) #输出请求状态码
    print(response.content.decode('utf-8')) #输出请求结果
    

    2、selenium

    selenium模块可以用于自动化打开浏览器相当于用户主动操作,不用去刻意添加请求头、cookies等,可以大大增加爬虫的成功率
    安装
    selenium属于第三方库,需要pip安装

    pip install selenium
    

    使用
    在使用该模块之前,需要配置和浏览器版本对应的浏览器驱动,谷歌浏览器下载驱动地址如下
    https://npm.taobao.org/mirrors/chromedriver/
    其他浏览器驱动请百度一下
    驱动下载完毕后需要添加到环境变量,也可直接将驱动放到python的安装环境下面,建议放到python安装环境中
    浏览器驱动
    代码测试

    from selenium import webdriver
    import time
    url = 'http://localhost:5000/'
    # 设置静默模式,谷歌浏览器设置成后台运行,不会自动打开浏览器
    #options = webdriver.ChromeOptions()
    #options.add_argument('headless')
    #driver = webdriver.Chrome(chrome_options=options)
    # 自动打开浏览器
    driver = webdriver.Chrome()
    
    driver.get(url)
    time.sleep(2)  # 暂停两秒,等待浏览器缓冲
    print(driver.page_source) #输出访问地址的整个页面代码
    driver.quit()  # 关闭浏览器
    

    selenium模块自动化脚本测试模块,功能非常强大,相当于人为操作浏览器,这里只是抛砖引玉。需要详细了解的可以直接在CSDN或者百度中搜索进行学习

    3、urllib

    原文来自:https://www.cnblogs.com/pywjh/p/9689734.html
    别人写的太好太明白,自己主要起个 c v 的作用,以免画蛇添足,建议大家可以直接去看原文。

    urllib作为Python的标准库,基本上涵盖了基础的网络请求功能。

    urllib.request
    urllib中,request这个模块主要负责构造和发起网络请求,并在其中加入Headers、Proxy等。

    发起GET请求
    主要使用urlopen()方法来发起请求:

    from urllib import request
    ​
    resp = request.urlopen('http://www.baidu.com')
    print(resp.read().decode('utf-8')) #使用对象的read()方法获得bytes数据。然后进行decode转码
    

    发起POST请求
    urlopen()默认的访问方式是GET,当在urlopen()方法中传入data参数时,则会发起POST请求。

    注意:传递的data数据需要为bytes格式。

    设置timeout参数还可以设置超时时间,如果请求时间超出,那么就会抛出异常。

    from urllib import request
    ​#加上data参数发起POST请求并设置超时时间
    resp = request.urlopen('http://httpbin.org', data=b'word=hello', timeout=10)
    print(resp.read().decode()) #同样需要转码
    

    添加Headers
    通过urllib发起的请求会有默认的一个Headers:“User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。

    所以遇到一些验证User-Agent的网站时,我们需要自定义Headers,而这需要借助于urllib.request中的Request对象。

    from urllib import request
    ​
    url = 'http://httpbin.org/get'
    headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}# 需要使用url和headers生成一个Request对象,然后将其传入urlopen方法中
    req = request.Request(url, headers=headers)
    resp = request.urlopen(req)
    print(resp.read().decode())
    

    Request对象
    如上所示,urlopen()方法中不止可以传入字符串格式的url,也可以传入一个Request对象来扩展功能,Request对象如下所示。

    class urllib.request.Request(url, data=None, headers={},
                               origin_req_host=None,
                               unverifiable=False, method=None)
    

    构造Request对象必须传入url参数,data数据和headers都是可选的。
    最后,Request方法可以使用method参数来自由选择请求的方法,如PUT,DELETE等等,默认为GET。

    添加Cookie
    为了在请求时能带上Cookie信息,我们需要重新构造一个opener。

    使用request.build_opener方法来进行构造opener,将我们想要传递的cookie配置到opener中,然后使用这个opener的open方法来发起请求。

    from http import cookiejar
    from urllib import request
    ​
    url = 'http://httpbin.org/cookies'
    # 创建一个cookiejar对象
    cookie = cookiejar.CookieJar()
    # 使用HTTPCookieProcessor创建cookie处理器
    cookies = request.HTTPCookieProcessor(cookie)
    # 并以它为参数创建Opener对象
    opener = request.build_opener(cookies)
    # 使用这个opener来发起请求
    resp = opener.open(url)
    print(resp.read().decode())
    

    或者也可以把这个生成的opener使用install_opener方法来设置为全局的。

    则之后使用urlopen方法发起请求时,都会带上这个cookie。

    # 将这个opener设置为全局的opener
    request.install_opener(opener)
    resp = request.urlopen(url)
    

    设置Proxy代理
    使用爬虫来爬取数据的时候,常常需要使用代理来隐藏我们的真实IP。

    from urllib import request
    ​
    url = 'http://httpbin.org/ip'
    proxy = {'http':'50.233.137.33:80','https':'50.233.137.33:80'}
    # 创建代理处理器
    proxies = request.ProxyHandler(proxy)
    # 创建opener对象
    opener = request.build_opener(proxies)
    ​
    resp = opener.open(url)
    print(resp.read().decode())
    

    下载数据到本地
    在我们进行网络请求时常常需要保存图片或音频等数据到本地,一种方法是使用python的文件操作,将read()获取的数据保存到文件中。

    而urllib提供了一个urlretrieve()方法,可以简单的直接将请求获取的数据保存成文件。(对于做前端开发的来说和需要爬虫的人来说是个绝好的东西)
    urlretrieve()方法传入两个参数,第一个是url字符串,第二个是文件保存的地址以及文件名

    from urllib import request
    ​
    url = 'http://python.org/'
    request.urlretrieve(url, 'python.html') 
    

    urllib.response
    在使用urlopen()方法或者opener的open()方法发起请求后,获得的结果是一个response对象。
    这个对象有一些方法和属性,可以让我们对请求返回的结果进行一些处理。
    read()
    获取响应返回的数据,只能使用一次。

    getcode()
    获取服务器返回的状态码。

    getheaders()
    获取返回响应的响应报头。

    geturl()
    获取访问的url。

    res = request.urlopen('https://cd.meituan.com/')
    getData = res.getcode()
    print(getData) #200
    print(res.getheaders()) #客户端请求头
    print(res.geturl()) # https://www.meituan.com/error/403
    #美团的反爬直接返回了403
    

    urllib.parse
    urllib.parse是urllib中用来解析各种数据格式的模块。

    urllib.parse.quote
    在url中,是只能使用ASCII中包含的字符的,也就是说,ASCII不包含的特殊字符,以及中文等字符都是不可以在url中使用的。而我们有时候又有将中文字符加入到url中的需求,例如百度的搜索地址:

    https://www.baidu.com/s?wd=南北

    ?之后的wd参数,则是我们搜索的关键词。那么我们实现的方法就是将特殊字符进行url编码,转换成可以url可以传输的格式,urllib中可以使用quote()方法来实现这个功能。

    from urllib import parse
     keyword = '南北'
    parse.quote(keyword)
    >>>'%E5%8D%97%E5%8C%97'
    

    如果需要将编码后的数据转换回来,可以使用unquote()方法。

    >>> parse.unquote('%E5%8D%97%E5%8C%97')
    '南北'
    

    urllib.parse.urlencode
    在访问url时,我们常常需要传递很多的url参数,而如果用字符串的方法去拼接url的话,会比较麻烦,所以urllib中提供了urlencode这个方法来拼接url参数。

    >>> from urllib import parse
    >>> params = {'wd': '南北', 'code': '1', 'height': '188'}
    >>> parse.urlencode(params)
    'wd=%E5%8D%97%E5%8C%97&code=1&height=188'
    

    urllib.error
    在urllib中主要设置了两个异常,一个是URLError,一个是HTTPError,HTTPError是URLError的子类。
    HTTPError还包含了三个属性:
    code:请求的状态码
    reason:错误的原因
    headers:响应的报头

    4、urllib3

    Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库。许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库urllib里所没有的重要特性:

    1、线程安全
    2、连接池
    3、客户端SSL/TLS验证
    4、文件分部编码上传
    5、协助处理重复请求和HTTP重定位
    6、支持压缩编码
    7、支持HTTP和SOCKS代理
    urllib是一个第三方库,需要使用pip安装

    pip install urllib3
    

    使用

    import urllib3 
    # urllib3主要使用连接池进行网络请求的访问,所以访问之前我们需要创建一个连接池对象
    http = urllib3.PoolManager()
    r = http.request('GET','https://cd.meituan.com/')
    print(r.status) #得到状态码
    print(r.data.decode('utf-8')) #同样需要进行转码,不然就是bytes码
    

    设置headers

    headers={'X-Something': 'value'}
    resp = http.request('GET', 'http://httpbin.org/headers', headers=headers)
    

    设置url参数
    对于GET等没有请求正文的请求方法,可以简单的通过设置fields参数来设置url参数。

    fields = {'arg': 'value'}
    resp = http.request('GET', 'http://httpbin.org/get', fields=fields)
    

    如果使用的是POST等方法,则会将fields作为请求的请求正文发送。

    所以,如果你的POST请求是需要url参数的话,那么需要自己对url进行拼接。

    fields = {'arg': 'value'}
    resp = http.request('POST', 'http://httpbin.org/get', fields=fields)
    
    >>> import urllib3
    >>> proxy = urllib3.ProxyManager('http://50.233.137.33:80', headers={'connection': 'keep-alive'})
    >>> resp = proxy.request('get', 'http://httpbin.org/ip')
    >>> resp.status
    200
    >>> resp.data
    b'{"origin":"50.233.136.254"}\n'
    

    注:
    urllib3中没有直接设置cookies的方法和参数,只能将cookies设置到headers中

    展开全文
  • Urllib 模块 Request 请求 Rep = request.Request(请求地址,请求参数,请求头,请求方法) 设置请求信息 Response = request.Urlopen(请求信息,ssl验证) 发送请求 Response.read().decode(‘utf-8’) read 获取...

    Urllib 模块

    Request 请求

    Rep = request.Request(请求地址,请求参数,请求头,请求方法)  设置请求信息

    Response = request.Urlopen(请求信息,ssl验证) 发送请求

    Response.read().decode(‘utf-8’)   read 获取到的内容 decode 设置字符集

    Parse 解析

    Urlencode() url编码

    Urldecode() url解码

    Ssl 模块

    _create_unverified_context()  创建未验证的上下文

    Requests 模块

    安装

    pip install requests

    请求参数

    Url 请求地址

    params\data(数据[('key1', 'value1'), ('key1', 'value2')]) 请求参数

    headers 请求头

    stream = true(socket流响应)

    json = {‘color’:’red’} 请求参数

    files = files(files = {‘file’:open(‘text.txt’,’rb’)}) 文件上传post请求

    Timeout 设置超时时间

    请求方式

    Get(url,headers = head)

    Post(url)

    Put(url)

    Delete(url)

    Head(url)

    Options(url)

    获取内容

    Response.text 获取服务器响应文本内容

    Response.encoding = ‘utf-8’ 设置字符集

    Response.content 获取字节响应内容

    Response.status_code 获取响应码

    Response.headers 获取响应头

    Response.json() 获取json响应内容

    Response.raw / raw.read(10)  获取socket流响应内容

    Response.cookies[‘key’]  获取cookie信息

    异常捕获

    Requests.exceptions.ConnectionError 链接错误

    Requests.exceptions.RequestException 请求异常

    展开全文
  • python3.X中urllib没有request问题解决方法: 问题 俺使用的是pycharm2021,python3.9。 在学习爬虫时,俺遇到了import urllib.request不能引入的问题,而且绝对它不会自动弹出 解决方法: 你的XX.py文件名不可以为...

    python3.X中urllib没有request

    问题

    俺使用的是pycharm2021,python3.9。
    在学习爬虫时,俺遇到了import urllib.request不能引入的问题,而且绝对它不会自动弹出

    解决方法:

    你的XX.py文件名不可以为urllib,改了名以后一切正常

    展开全文
  • 因为在3版本中库进行了整合,具体变动如下:Py3.x:删除了Urllin2库,统一更改为UrllibUrllib库变化:在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.requesturllib.error。...
  • urllib.request.urlopen详解

    2021-08-06 23:29:39
    Urllib是python内置的HTTP请求库: ...python2中urllib2库中的很多方法在python3中被移至urllib.request库中。 urllib.request.urlopen urllib.request.urlopen(url, data=None, [timeout, ]*, caf
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼Python 2 namePython 3 nameurllib2.urlopen() urllib.request.urlopen()urllib2.install_opener() urllib.request.install_opener()urllib2.build_opener() urllib....
  • 演示:>>> import json >>> import urllib.request >>> urlData = "http://api.openweathermap.org/data/2.5/weather?q=Boras,SE" >>> webURL = urllib.request.urlopen(urlData) >>> data = webURL.read() >>> ...
  • 当我尝试在PyCharm 2.7中的OS X 10.8上运行以下Python 3.3代码(或使用Python 3.3/2.7.3启动程序运行.py文件)时:import urllib.requestf = urllib.request.urlopen('http://www.python.org/')print(f.read(300))我...
  • 在Python中有很多库可以用来抓取网页,我们先学习urllib.request。(在python2.x中为urllib2)urlopen我们先阅读以下代码:#!/usr/bin/python3# -*- conding:utf-8 -*-__author__ = 'mayi'# 导入urllib.request库imp.....
  • Python之urllib爬虫-request模块和parse模块详解

    千次阅读 多人点赞 2021-03-10 09:10:52
    urllib是Python中用来处理URL的工具包,本文利用该工具包进行爬虫开发讲解,毕竟爬虫应用开发在Web互联网数据采集中十分重要。 文章目录 urllib request模块 访问URL Request类 其他类 parse模块 解析URL 转义URL ...
  • 1.3 urllib.request.Request 2 urllib.parse 模块使用 2.1 urllib.parse.encode() 2.2 urllib.parse.quote()的使用 2.3 综合练习 3 爬虫百度贴吧练习 1. urllib requst使用 1.1 基本介绍 (1)介绍: urllib 的 ...
  • 文章目录两者间主要区别urllib.request导入方法内容requests导入方法内容两者间主要区别使用urllin内的request模块是,返回体获取有效信息和请求体的拼接需要decode和encode后再进行装载。进行http请求时需先构造get...
  • 背景 使用python3的urllib调用spring cloud服务接口,一直报错 File "E:\github\workspace\... resp = urllib.request.urlopen(req, timeout=5) File "C:\Users\zhangjikuan\AppData\Local\Programs\Python\Python36
  • 当时查了各种资料学习,没有碰官网文档(因为还是对英语有抗拒性),但是还是官方的文档最具权威和学习价值,因此想要此次翻译官方文档的同时,锻炼自己的英语能力,也对urllib模块加深理解。因为是为了自己复习起来...
  • 摘要:python3.x 版本将urllib与...简单介绍一下用过的urllib.requesturllib.parseurllib is a package that collects several modules for working with URLs:urllib.request for opening and reading URLsurll...
  •  line 10, in download resp = request.urlopen(url) File "E:\Tools\Python\Python3.5\lib\urllib\request.py", line 163, in urlopen return opener.open(url, data, timeout) File "E:\Tools\...
  • f = request.urlopen('http://www.baidu.com/')>>> f.read()b'\n\n\r...(略)...'>>> f.read()b''因此,从你的第二个f.read()开始,都是返回b''了。这样代码在我这能正确获取网页并解码:from u.....
  • import urllib.request import urllib.parse page = int(input('请输入页码:')) if page < 1: print('页码输入错误,请输入大于等于1的数字') url = 'https://maoyan.com/films?showType=3&' headers = {...
  • urllib包urllib是一个包含几个模块来处理...urllib.parse 解析urlurllib.robotparser 解析robots.txt 文件urllib.requesturllib当中使用最多的模块,涉及请求,响应,浏览器模拟,代理,cookie等功能。1. 快速请求...
  • python中urllib.request使用

    千次阅读 2021-10-09 16:15:03
    requests比urllib.request更加强大便捷,但是urllib.request也有其优点。 我们都知道,urlopen()方法能发起最基本对的请求发起,但仅仅这些在我们的实际应用中一般都是不够的,可能我们需要加入headers之类的参数,...
  • 我正试图打开并解析一个html页面。在Python2.7.8中,我没有问题:import urlliburl = "https://ipdb.at/ip/66.196.116.112"html = urllib.urlopen(url).read()一切都很好。...我的代码:import urllib.requesthtml =...
  • 先是发现没有找到request,去setting里面找也没有相应模板(或者就是无法下载) 后来发现文件名下面有红色的波纹········ 只要把文件名改成别的 不写成“urllib.py”就行了········ ...
  • 在学习python爬虫,想要检索request相关内容时,往往会出现urllib.request和requests这两个词,urllib.request和requests都是python爬虫的模块,其中urllib.requesturllib库模块的请求模块,主要用来打开或者读取...
  • 在运用requests爬取网页时,会出现 需要在请求参数里边添加一个 proxies = {“http”: None, “https”: None},即可以解决上边的问题。
  • urllib.request优缺点 优点 将proxy,cookie,重定向等功能做成插件式,并对这些插件排序管理,用于在网络访问时各个功能按次使用 集成http、https、ftp等应用层协议 默认自动处理 http 300 系列重定向响应 采用...
  • , str(file_name)) File "/Users/wz/anaconda/lib/python3.5/urllib/request.py", line 188, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "/Users/wz/anaconda/lib/python3.5/urllib/...
  • 爬虫——urllib.request库的基本使用所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。在Python中有很多库可以用来抓取网页,我们先学习urllib.request。(在python2.x中为urllib2)...
  • 溪桥学爬虫-03:请求模块urlliburllib.requesturllib.parse.urlencode、urllib.parse.quote(str)、parse.unquote() 日期:2021年1月26日 学习目标: 请求模块urllib urllib.request urllib.parse....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,527
精华内容 35,810
关键字:

requesturllib