我正在使用python 3.5.4,请求2.21.0,urllib3 1.24.1和套接字1.0.0
当我在Mac(OS Mojave)上运行以下代码时,它可以正确连接到网站并返回html以便我进行抓取和分析,但是,当我在linux VM Ware上尝试此操作时,因为客户端没有MAC,我收到套接字错误。
quote_page = "http://stats.ncaa.org/teams/312381"
hdr = {
'Temp': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
session = requests.Session()
req = session.get(quote_page, headers=hdr)
错误:
socket.gaierror: [Errno 8] nodename nor servname provided, or not known
当我尝试通过直接的低级套接字进行连接时,我能够在MAC上重新创建错误。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = ("http://stats.ncaa.org/teams/312381", 80)
s.connect(server)
s.sendall("GET / HTTP/1.1\r\n")
print(s.recv(4096))
我不知道我做错了什么,为什么它不能在OS X上运行但不能在Ubuntu上运行。
答案 0 :(得分:0)
已解决:问题是我正在从网页获取URL,并且网页格式根据我所使用的操作系统而有所不同。意味着我从网页中获得了错误的网址。
答案 1 :(得分:0)
我认为您的问题是您在要连接到的地址的主机名部分中包含字符串 http://
和 URL 路径 (/teams/312381
)。忽略这一点,你会没事的。