我想用python 3.7编写脚本。但是首先我必须把它报废。 我在连接和从不受禁止的站点获取数据没有问题,但是如果该站点被禁止,它将无法正常工作。
如果我使用VPN服务,则可以使用Chrome浏览器进入这些“被禁止”的网站。
我尝试在pycharm中设置代理,但失败了。我一直都在犯错误。 解决此问题的最简单和免费的方法是什么?
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as soup
req = Request('https://www.SOMEBANNEDSITE.com/', headers={'User-Agent': 'Mozilla/5.0'}) # that web site is blocked in my country
webpage = urlopen(req).read() # code stops running at this line because it can't connect to the site.
page_soup = soup(webpage, "html.parser")
答案 0 :(得分:0)
您最好的解决方案是通过requests
库使用代理。这将是您最好的解决方案,因为它具有通过代理flexibly handling the requests的功能。
这是一个小例子:
import requests
from bs4 import BeautifulSoup as soup
# use your usable proxies here
# replace host with you proxy IP and port with port number
proxies = { 'http': "http://host:port",
'https': "https://host:port"}
text = requests.get('http://www.somebannedsite.com', proxies=proxies, headers={'User-Agent': 'Mozilla/5.0'}).text
page_soup = soup(text, "html.parser") # use whatever parser you prefer, maybe lxml?
如果要使用SOCKS5,则必须通过pip install requests[socks]
获取依赖项,然后将代理部分替换为:
# user is your authentication username
# pass is your auth password
# host and port are similar as above
proxies = { 'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port' }
如果您手边没有代理,可以fetch some proxies。
答案 1 :(得分:0)
有多种方法可以清除被阻止的网站。一种可靠的方法是使用代理服务(如前所述)。
代理服务器,也称为“代理”,是充当计算机和Internet之间的网关的计算机。 使用代理时,您的请求将通过代理转发。您的IP不会直接暴露给您要剪贴的站点。
您不能简单地使用任何IP(例如xxx.xx.xx.xxx)和端口(例如yy)
import requests
proxies = { 'http': "http://xxx.xx.xx.xxx:yy",
'https': "https://xxx.xx.xx.xxx:yy"}
r = requests.get('http://www.somebannedsite.com', proxies=proxies)
并希望得到答复。
应该将代理配置为接受您的请求并向您发送响应。
那么,在哪里可以获得代理?
a。您可以从许多提供商处购买代理。
b。使用互联网上的免费代理列表。
除非进行大规模的报废,否则您无需购买代理。
现在,我将重点介绍Internet上提供的免费代理。只需在Google中搜索“免费代理提供商”,您就会找到提供免费代理的网站列表。转到其中任何一个并获取任何ip
和相应的port
。
import requests
#replace the ip and port below with the ip and port you got from any of the free sites
proxies = { 'http': "http://182.52.51.155:39236",
'https': "https://182.52.51.155:39236"}
r = requests.get('http://www.somebannedsite.com', proxies=proxies)
print(r.text)
如果可能的话,您应该使用具有“ Elite”匿名级别的代理(在提供免费代理的大多数站点中都将指定匿名级别)。如果有兴趣,您还可以通过Google搜索找到“精英”,“匿名”和“透明”代理之间的区别。
注意:
大多数免费代理都不那么可靠。因此,如果一个IP地址和端口组合出现错误。尝试另一个。