标签: python-requests

如何卸载Requests 2.0.0?

我安装了 Python 的 Requests 2.0.0 库,我想卸载它。有什么简单的方法可以卸载吗?

提前致谢。

python python-requests

0
推荐指数
1
解决办法
1万
查看次数

Python 网页抓取,如果错误则跳过 url

我正在尝试抓取一个网站(大约 7000 个链接,全部在一个列表中),由于我的方法,它需要很长时间,我想我对此没有意见(因为这意味着不被发现)。但是,如果我在尝试检索页面时遇到任何类型的错误,我可以跳过它吗?现在,如果出现错误,代码就会中断并给出一堆错误消息。这是我的代码:

Collection是列表的列表和结果文件。基本上,我试图运行一个循环get_url_data()(我有一个之前的问题要感谢),我的所有网址都在urllist. 我有一个叫做HTTPError但似乎不能处理所有错误的东西,因此这篇文章。在相关的支线任务中,获得无法处理的网址列表也很好,但这不是我主要关心的问题(但如果有人能告诉我如何处理,那就太酷了)。

Collection=[]
def get_url_data(url):

    try:
        r = requests.get(url, timeout=10)
        r.raise_for_status()

    except HTTPError:
        return None

    site = bs4.BeautifulSoup(r.text)
    groups=site.select('div.filters')
    word=url.split("/")[-1]

    B=[]
    for x in groups:
        B.append(word)
        T=[a.get_text() for a in x.select('div.blahblah [class=txt]')]
        A1=[a.get_text() for a in site.select('div.blah [class=txt]')]
        if len(T)==1 and len(A1)>0 and T[0]=='verb' and A1[0]!='as in':
            B.append(T)
            B.append([a.get_text() for a in x.select('div.blahblah [class=ttl]')])
            B.append([a.get_text() for a in x.select('div.blah [class=text]')])
            Collection.append(B)
        B=[]

for url in urllist:
    get_url_data(url)
Run Code Online (Sandbox Code Playgroud)

我认为主要的错误代码是这个,它触发了其他错误,因为有一堆以During handling …

python error-handling web-scraping python-requests

0
推荐指数
1
解决办法
5863
查看次数

Python - POST 多个标头

我正在尝试发布一些 xml 以使用 python 以编程方式创建论坛主题。基本上我需要发布带有以下标题的 xml:

授权:基本内容类型:application/atom+xml

这是我尝试使用的代码,但它需要单个 request.post() 中的两个标头:

import base64
from requests.auth import HTTPBasicAuth
import requests

xml = "<xml code here>"
url = 'https://server/forums/atom/forum?id=b7915594-5c46-4ae6-916a-be869aabb327'
userID = 'userid'
password = 'password'

header = {"Content-type": "application/atom+xml"}

r = requests.post(url, headers=header, auth=HTTPBasicAuth(userID,password), data=xml)
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏。提前谢谢您

python http-post python-requests

0
推荐指数
1
解决办法
7404
查看次数

将字符串中的二进制数据写入二进制文件

我有一个通过使用requests.get()存储在字符串中获得的 torrent 文件,并像这样获得:

import requests
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept-Charset': 'utf-8',
'Connection': 'keep-alive'}
request = requests.get(url, headers=headers)
data = requests.text
Run Code Online (Sandbox Code Playgroud)

我想将其写入二进制文件,以便其中的数据正确且有效:

with open(name, "wb") as f:
    f.write(data)
Run Code Online (Sandbox Code Playgroud)

然而,我似乎无法将字符串写为纯二进制数据,因为 python 不断尝试将其解释为 Unicode,并且出现如下错误:"UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-9: ordinal not in range (128)

我尝试使用 bytearray 但出现了类似的问题:TypeError: unicode argument without an encoding

有没有办法将字符串中的字节按原样写入文件?

python unicode binaryfiles python-2.7 python-requests

0
推荐指数
1
解决办法
3315
查看次数

使用 python 请求创建新的 Jenkins 作业

我成功地使用了这个:

curl -X POST -H "Content-Type:application/xml" -d "<project><builders/><publishers/><buildWrappers/></project>" "http://USER:PASSWORD@JENKINS_HOST/createItem?name=NEW_JOB_NAME"
Run Code Online (Sandbox Code Playgroud)

我将其转换为以下 python 代码:

url     = "http://USER:PASS@HOST/createItem"
payload = { 'name' : 'NEW_JOB_NAME' }
headers = {"Content-Type:application/xml"}
r = requests.post(url, data=payload, headers=headers)
Run Code Online (Sandbox Code Playgroud)

我应该把"<project><builders/><publishers/><buildWrappers/></project>"零件放在哪里?

python jenkins python-requests

0
推荐指数
1
解决办法
6855
查看次数

SametimeWeb 访问 API 的日期限制是什么?Python 请求流量 API 时出现“日期不在范围内”错误

我正在尝试使用Python请求从SimilarWeb API获取数据,如下所示:

import requests
MY_API_KEY = 'XXXXXXXXXXXXXXXXXX'

API_URL = "https://api.similarweb.com/v1/website/{site}/" \
          "total-traffic-and-engagement/visits?api_key={api_key}" \
          "&start_date={start_date}" \
          "&end_date={end_date}" \
          "&main_domain_only=false" \
          "&granularity={granularity}".format(
    site='cnn.com',
    api_key=MY_API_KEY,
    start_date="2017-09",
    end_date="2017-10",
    granularity="monthly"
)

response = requests.get(API_URL)
print response.json()
Run Code Online (Sandbox Code Playgroud)

尽可能遵循他们自己网站上的 simpleweb 示例(此处)。只是日期不同而已。

但是,我收到一个 json 错误,指出 json 中的“日期不在范围内”:

{
    u'meta': {
        u'status': u'Error', 
        u'error_code': 101, 
        u'error_message': u'Dates not in range', <--- error msg
        u'request': {
            u'domain': u'cnn.com', 
            u'end_date': u'2017-10-31', 
            u'format': None, 
            u'country': u'world', 
            u'main_domain_only': False, 
            u'limit': None, 
            u'granularity': u'Monthly', 
            u'start_date': u'2017-09-01'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的日期(包括示例中的日期 - …

python-2.7 python-requests similarweb

0
推荐指数
1
解决办法
1278
查看次数

为什么Python中的“requests”无法下载该url图像,但浏览器可以?

我有以下网址,它实际上是一个图像。

https://cache.mrporter.com/images/products/908290/908290_mrp_in_l.jpg
Run Code Online (Sandbox Code Playgroud)

我使用下面的Python代码来下载它

import numpy as np
from PIL import Image
import requests
response = requests.get("https://cache.mrporter.com/images/products/908290/908290_mrp_in_l.jpg")
Run Code Online (Sandbox Code Playgroud)

我看到 requests.get 只是挂起,如果我使用 5 秒的超时,我会收到 TimeOut 异常。

但是,当我将网址粘贴到浏览器中时,我立即看到它打开了。

我真的被困在这里并试图了解问题所在。

python browser http python-requests

0
推荐指数
1
解决办法
1195
查看次数

无法使用 cloudflare 和 python 请求创建 dns-over-https

我正在尝试编写一个快速脚本,可以使用来自 CloudFlare 的新 1.1.1.1 DNS over HTTPS 公共 DNS 服务器进行 dns 查找。

在这里查看他们的文档https://developers.cloudflare.com/1.1.1.1/dns-over-https/json-format/我不确定我做错了什么以及为什么我收到 415 状态代码(415 不支持的内容类型)。

这是我的脚本: #!/usr/bin/env python import requests import json from pprint import pprint

url = 'https://cloudflare-dns.com/dns-query'
client = requests.session() 

json1 = {'name': 'example.com','type': 'A'}

ae = client.get(url, headers = {'Content-Type':'application/dns-json'}, json = json1)


print ae.raise_for_status()
print ae.status_code

print ae.json()

client.close()
Run Code Online (Sandbox Code Playgroud)

这是输出:

    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 415 Client Error: Unsupported Media Type for url: https://cloudflare-dns.com/dns-query
Run Code Online (Sandbox Code Playgroud)

对于 json 响应(我相信):

raise ValueError("No JSON object could be decoded") …
Run Code Online (Sandbox Code Playgroud)

dns json python-requests dns-over-https

0
推荐指数
1
解决办法
2767
查看次数

尝试请求页面时读取超时

我正在尝试抓取网站,有时会收到此错误,这令人担忧,因为我随机收到此错误,但在重试后,我没有收到此错误。

requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.somewebsite.com', port=443): Read timed out. (read timeout=None)
Run Code Online (Sandbox Code Playgroud)

我的代码如下所示

from bs4 import BeautifulSoup
from random_user_agent.user_agent import UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem
import requests

software_names = [SoftwareName.CHROME.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value]
user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=100)
pages_to_scrape = ['https://www.somewebsite1.com/page', 'https://www.somewebsite2.com/page242']

for page in pages_to_scrape:
  time.sleep(2)
  page = requests.get(page, headers={'User-Agent':user_agent_rotator.get_random_user_agent()})
  soup = BeautifulSoup(page.content, "html.parser")
  # scrape info 
Run Code Online (Sandbox Code Playgroud)

正如您从我的代码中看到的,我什至使用 Time 使我的脚本休眠几秒钟,然后再请求另一个页面。我还使用随机的 user_agent。我不确定是否可以做任何其他事情来确保我永远不会收到“读取超时”错误。

我也遇到过这个,但他们似乎建议向标题添加额外的值,但我不确定这是否是一个通用的解决方案,因为这可能必须根据网站的具体情况而定。我还在另一篇SO Post上读到,我们应该对请求进行 Base64 处理并重试。这让我很困惑,因为我不知道该怎么做,而且这个人也没有提供例子。

任何有刮擦经验的人的建议将不胜感激。

python beautifulsoup web-scraping python-requests

0
推荐指数
1
解决办法
2788
查看次数

使用 python 发送 post 请求最快的方法是什么?

我尝试了普通的“请求”模块,但它真的很慢,有没有更快的方法来发送 POST 请求?

import requests 
from time import time 
t = time() 
requests.post("https://httpbin.org/post") 
print(time() - t)  # 0.884 s
Run Code Online (Sandbox Code Playgroud)

对于 GET 请求也是如此:

requests.get("https://example.com/") 
print(time() - t)  # 0.604 s
Run Code Online (Sandbox Code Playgroud)

python post http python-requests

0
推荐指数
1
解决办法
5484
查看次数