我安装了 Python 的 Requests 2.0.0 库,我想卸载它。有什么简单的方法可以卸载吗?
提前致谢。
我正在尝试抓取一个网站(大约 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 …
我正在尝试发布一些 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)
任何帮助是极大的赞赏。提前谢谢您
我有一个通过使用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。
有没有办法将字符串中的字节按原样写入文件?
我成功地使用了这个:
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请求从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)
我尝试了许多不同的日期(包括示例中的日期 - …
我有以下网址,它实际上是一个图像。
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 异常。
但是,当我将网址粘贴到浏览器中时,我立即看到它打开了。
我真的被困在这里并试图了解问题所在。
我正在尝试编写一个快速脚本,可以使用来自 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) 我正在尝试抓取网站,有时会收到此错误,这令人担忧,因为我随机收到此错误,但在重试后,我没有收到此错误。
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 处理并重试。这让我很困惑,因为我不知道该怎么做,而且这个人也没有提供例子。
任何有刮擦经验的人的建议将不胜感激。
我尝试了普通的“请求”模块,但它真的很慢,有没有更快的方法来发送 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-requests ×10
python ×8
http ×2
python-2.7 ×2
web-scraping ×2
binaryfiles ×1
browser ×1
dns ×1
http-post ×1
jenkins ×1
json ×1
post ×1
similarweb ×1
unicode ×1