此时我尝试了一些方法来拉取这个网站并将其填充到一个变量中以便稍后进行解析,并且所有这些方法都抛出了相同的错误:
IOException:无法将数据写入传输连接:已建立的连接已被主机中的软件中止。
SocketException:已建立的连接已被主机中的软件中止
到目前为止,我已经在.Net lib中尝试了WebClient.DownloadString(),类似于.Net.Http lib,以及来自HtmlAgilityPack lib的HtmlDocument.Load()都具有相同的结果。在.Net lib中,我尝试了通常建议的禁用keepalive的解决方案,我只是假设在我的计算机上有一些设置导致这种情况。
有什么想法吗?并提前感谢阅读。 =)
这是我目前的代码:
import json
from pprint import pprint
import re
html = """your HTML here (same as above)"""
match = re.search(r"var dataLayer = (\[.*?\]);$", html, re.MULTILINE | re.DOTALL)
if match:
data = match.group(1).replace("'", '"')
data = json.loads(data)
pprint(data)
答案 0 :(得分:0)
这可能与您的实际代码中设置using语句的方式有关。
以下适用于我:
var wc = new System.Net.WebClient()
string tcgpSite = wc.DownloadString("http://shop.tcgplayer.com/magic?newSearch=true");
与您发布的代码一样。
否则,您可能会遇到某种防火墙或其他网络问题关闭连接。错误似乎表明相同。
SocketException:已建立的连接被主机中的软件中止。
尝试暂时禁用您的计算机可能正在运行的任何防火墙或防病毒。