是否urllib2在urlopen拨打电话时获取整个页面?
我想在不获取页面的情况下读取HTTP响应头.它看起来像urllib2打开HTTP连接,然后获取实际的HTML页面......或者它是否只是通过urlopen调用开始缓冲页面?
import urllib2
myurl = 'http://www.kidsidebyside.org/2009/05/come-and-draw-the-circle-of-unity-with-us/'
page = urllib2.urlopen(myurl) // open connection, get headers
html = page.readlines() // stream page
Run Code Online (Sandbox Code Playgroud) 这是我的脚本:
import requests, os
ips = ['158.46.169.208','158.46.169.252','158.46.169.76','158.46.171.23','158.46.172.217','158.46.172.55','158.46.172.98','158.46.173.104']
headers = {"User-Agent": "Edg/90.0.818.56"}
os.system("python3 --version") #On Windows it changes to os.system("python --version")
for i in ips:
pr = {'http':"http://"+"abcd-"+i+':xyz@example.io:22225','https':'https://'+"abcd-"+i+':xyz@example.io:22225'}
res1 = requests.get("https://www.google.com/search?q=butter",headers=headers, proxies= pr)
print(requests.get("https://www.httpbin.org/ip",proxies = pr,headers=headers).text)
print(res1.status_code)
Run Code Online (Sandbox Code Playgroud)
Windows 10 上的输出:
import requests, os
ips = ['158.46.169.208','158.46.169.252','158.46.169.76','158.46.171.23','158.46.172.217','158.46.172.55','158.46.172.98','158.46.173.104']
headers = {"User-Agent": "Edg/90.0.818.56"}
os.system("python3 --version") #On Windows it changes to os.system("python --version")
for i in ips:
pr = {'http':"http://"+"abcd-"+i+':xyz@example.io:22225','https':'https://'+"abcd-"+i+':xyz@example.io:22225'}
res1 = requests.get("https://www.google.com/search?q=butter",headers=headers, proxies= pr)
print(requests.get("https://www.httpbin.org/ip",proxies = pr,headers=headers).text)
print(res1.status_code)
Run Code Online (Sandbox Code Playgroud)
Ubuntu 18.04 上的输出:
Python 3.8.2
{ …Run Code Online (Sandbox Code Playgroud) 我overpy用来查询 Overpass API,数据的性质使得我有很多查询要执行。我遇到了 429OverpassTooManyRequests异常,我正在努力遵守规则。我已经尝试引入time.sleep方法来分隔请求,但我没有关于程序在继续之前应该等待多长时间的依据。
我发现这个链接提到了“Retry-after”标头:
How to avoid HTTP error 429 (Too Many Requests) python
有没有办法在overpy响应中访问该标头?我已经浏览了文档和源代码,但没有任何内容可以让我访问该标题,以便我可以暂停查询,直到可以再次这样做为止。
我正在使用 Python 3.6 和 overpy 0.4。
我试图以编程方式向表单提交一些数据.我有一个小问题,服务器"不喜欢"我发送的内容.令人沮丧的是,没有任何错误信息或任何可以帮助诊断问题的信息,所有这一切都会让我回到我点击时开始的同一页面br.submit().
当我在浏览器中手动单击提交按钮时,生成的页面显示一个小的"成功!" 信息.通过脚本提交时不会显示此类消息.此外,实际上没有更改发布到服务器.这很奇怪,我第一次遇到这种行为.
通过Mechanize文档,它表明在这些奇怪的,难以诊断的问题下,最好复制浏览器实际提交的请求标头.
我的问题是,当我打电话时,如何查看请求标题是什么br.submit()?
location = 'http://ww.mysite.com'
br = mechanize.Browser()
cj = mechanize.LWPCookieJar()
br.set_cookiejar(cj)
username = MY_USER_NAME
password = MY_PASSWORD
br.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (username, password))))
br.open(location)
br.select_form(nr=0)
br['text'] = 'MY JUNK TO SUBMIT' #Text field. Can put anything
br['DropDown1'] = ['4'] #This is a dropdown of integer values
br['DropDown2'] = ['3'] #Also a dropdown of ints
br.submit()
Run Code Online (Sandbox Code Playgroud)
在提交表单时如何查看正在发送的标题?
拳头我不得不说,我对使用Python进行网络抓取非常陌生。我正在尝试使用这些代码行抓取数据
import requests
from bs4 import BeautifulSoup
baseurl ='https://name_of_the_website.com'
html_page = requests.get(baseurl).text
soup = BeautifulSoup(html_page, 'html.parser')
print(soup)
Run Code Online (Sandbox Code Playgroud)
作为输出,我没有得到预期的HTML页面,但另一个HTML页面显示:内容抓取工具行为不当请使用robots.txt您的IP已受速率限制
为了检查我写的问题:
try:
page_response = requests.get(baseurl, timeout =5)
if page_response.status_code ==200:
html_page = requests.get(baseurl).text
soup = BeautifulSoup(html_page, 'html.parser')
else:
print(page_response.status_code)
except requests.Timeout as e:
print(str(e))
Run Code Online (Sandbox Code Playgroud)
然后我得到429(请求太多)。
我该怎么处理这个问题?这是否意味着我无法打印页面的HTML,是否阻止了我刮擦页面的任何内容?我应该旋转IP地址吗?
python ×5
web-scraping ×2
forwarding ×1
linux ×1
mechanize ×1
overpass-api ×1
python-3.x ×1
urllib ×1