小编Sam*_*han的帖子

urllib.error.URLError: <urlopen 错误 [Errno 11002] getaddrinfo 失败>?

所以,我的代码只有 4 行。我正在尝试连接到一个网站,之后我想做的事情是无关紧要的,因为错误是在没有其他代码的情况下出现的。

\n\n
import urllib.request\nfrom bs4 import BeautifulSoup \n\nhtml=urllib.request.urlopen(\'http://python-data.dr-chuck.net/known_by_Fikret.html\').read()\nsoup=BeautifulSoup(html,\'html.parser\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及错误(简要总结一下):

\n\n
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nsocket.gaierror: [Errno 11002] getaddrinfo failed\nDuring handling of the above exception, another exception occurred:\nurllib.error.URLError: <urlopen error [Errno 11002] getaddrinfo failed>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我尝试过的。

\n\n
    \n
  1. 我在google上搜索了错误返回“urlopen错误[Errno 11002]\xe2\x80\x9d,特别是在stackoverflow上,没有返回任何有用的东西(事实上,关于这个错误11002没有太多问题被问到)。
  2. \n
  3. 所以然后我尝试用另一个网站“http://www.pythonlearn.com/code”替换 urlopen 函数内的网站参数(即“ http://python-data.dr-chuck.net/known_by_Fikret.html) /urllinks.py “。而且效果很好。没有出现错误。
  4. \n
  5. 所以我想这个错误一定与这个特定的网站本身有关。该网站有点动态,我的意思是它的内容会改变并变成另一个完全不同的东西。但我没有更多的知识,只能描述我所看到的。
  6. \n
\n\n

以及更长且完整的错误版本:

\n\n
Traceback (most recent call last):\nFile "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\lib\\urllib\\request.py", line 1240, in do_open\nh.request(req.get_method(), req.selector, req.data, headers)\nFile "C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\lib\\http\\client.py", line 1083, in request\nself._send_request(method, url, …
Run Code Online (Sandbox Code Playgroud)

python sockets urllib beautifulsoup

6
推荐指数
2
解决办法
3万
查看次数

根据位置抓取亚马逊价格时,cookie随机无法保留位置信息?

说明

  1. 我正在抓取 amazon 产品价格,我需要更改所选地址(又名交货地址),以便针对不同位置(可能不同)抓取相同产品的价格。

  2. 我已经在这个项目上工作了几个月,我发现与我抓取的其他网站不同,这些网站通过 javascript 请求将价格信息返回给他们的服务器,并提供相关参数,包括 skuid、productid 和当然位置;亚马逊不会这样做以返回其价格信息。看起来它只是请求整个 html 页面,价格是其中的一部分。正因为如此,没有简单的方法可以通过在对服务器的 javascript 请求中简单地指定不同的位置参数来抓取不同位置的价格。据我所知,亚马逊根据所选地址返回价格信息,该地址由 cookie 标识。因此,我的抓取策略。

  3. 我尝试在我的网络浏览器上加载亚马逊并手动检索 Chrome 网络中的 cookie,选择不同的位置,以便我可以在我的脚本中使用这些 cookie 来检索不同的价格。(我在这里所做的假设是位置信息是存储在 cookie 中。)

  4. 它有点奏效,我可以使用不同的 cookie 来获取不同的价格。

症状

在我尝试这种仅针对几个请求进行抓取的方式后,问题出现了。在第一次使用每个保存的 cookie 请求亚马逊页面时,一切正常。但是在那之后,使用我之前保存的两个不同位置的两个 cookie 发送请求将返回相同的价格(应该是不同的),我查看了页面源代码,发现选择的地址也是相同的(这是毫不奇怪,因为价格是一样的。)

想要的结果

这里的最终目标是能够从亚马逊页面上抓取基于位置的价格。当前的目标是之前手动保存的 cookie 将有助于根据所需位置取回不同的页面源代码。

相反会发生什么

使用手动保存的 cookie 请求亚马逊页面似乎在请求周期后停止工作,不同的 cookie 返回相同的价格/位置信息。

笔记

请注意,我们可以只关注所选地址,因为价格是所选地址的函数。所以我下面的代码将尝试打印出选定的地址并忽略价格。

代码

headers = 
{'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
#location:ShangHai, price:17,999 
#,'Cookie':'x-wl-uid=1DpDBnhSVJ+bNXzDZYpD4q7+iDfJ6GQATOxQy6bH2BnaDE4n/i4aKzzAQ0HKWvjhi4SmEwEIuSuA=; session-token=eYnxCsjigX0nCy8skngiSDkvjfEZlKavU9mTR8e9EP1Lh0pg4oYpoBxP3adQe7vZE9IDvl7xeLN+H5WF25TVXNTTywA3/Y82cuN+a2CdJs1L57Mzvwq7aLrbwtYQJfG2e1WP5/EXrV7oE02b8TB7KJA36q4w351NbUttqmq/yVrJQj7CZ+HMYcIsoxH2Ux8awhZ9jsROFJcaLmtcy+6muoLrtYQpa/QX230yKBQA90lu+D9jtd46BQ==; csm-hit=s-ZAYA2VY7F5MBZA6VKTTQ|1482202685913; ubid-acbcn=453-6620157-1313521; session-id-time=2082729601l; session-id=455-5193383-6307663'
#location: BeiJing price:15,999
,'Cookie':'x-acbcn=EwNBz6OLTIFDxQCv1qiUE4m16A00AUKs; at-main=Atza|IwEBINcqsHbV-1tFBCYlshzjTAyv5Z4msKVZ0rbOATXYrjE7AcoO3LSnYDzYpZcY2C4WP3oOPIlqWLWh9UcAzDHu6Xv6xcdbCW7jQ59cifSfpYiv3UQ0qR5Hk2VJjX0dcrsdgJUw-TWW8ZWLLhs2Z_CTD7Mphdn9fgvg7qnREuayGRpxekotq9lRXxeqJn3-IfoanhF9edDc0MYk2jTDtJv0AiJp71Wwo6PsNRTwwCg0JS69-H5QYeRbXfFSP-dTtVSGzB-MgVo4zX6dRSmYQ12_rjbfZa7ihj0s-3KtBFLnVP-R91VJrvDwMBSjfcyJHL734UfSrN6D6c1MCq76NoM-MpzmKncsn3n7Ruhnxork43k0onNA0jTl4SD1UDQ8dweuxP6FN0O7eTrWTaBkP_isuiDI; sess-at-main="Wyf/mENo8M2ZhLuc1RWCf++uvPG19jd3RE0X61PIhrk="; x-wl-uid=12Hr4lOV8Md2tj2TjdgVpNVGb5aL6MrEz19aI0yHjr7FY8N3HsTCe29HlZhe4NCBbeDw2KuN5ShkJajzdy70eGSYuSAIda2OF1CcLpnHo+Bd7mvKvVqTsj1pNwri9d8E2lMOUplbiuZ8=; session-id-time-cn=1482739200l; session-id-cn=452-5760864-5873122; …
Run Code Online (Sandbox Code Playgroud)

python cookies amazon web-scraping python-requests

5
推荐指数
1
解决办法
2604
查看次数

使用数组初始化指针时会发生什么?

我理解在某种情况下数组如何衰变成指向第一个元素的指针.

我知道int array[] = {1,2,3,4,5}创建一个数组,我们可以创建一个指针int *ptr = array,在指定之后,也指向数组的第一个元素.

问题是,当我这样做时会发生什么:int *ptr = {1,2,3,4,5}

我想printf("%d",ptr),printf("%d",ptr+1)printf("%d",ptr+2)它返回1,5并且9分别.

我试过printf("%d",*ptr),它返回一个segmentation fault

所以我看到ptr指向数组{1,2,3,4,5},并再次尝试:

for(int i=0;i<5;i++){
    printf("%d",(*p)[i]);
}
Run Code Online (Sandbox Code Playgroud)

然后它回来了 subscripted value is neither array nor pointer nor vector

然后我用Google搜索,无法真正找到我要找的东西.

c arrays pointers

1
推荐指数
1
解决办法
117
查看次数