urllib2随意拉出一个不同的页面

时间:2015-11-10 06:39:01

标签: python urllib2

我试图为这个url制作一个bs4刮刀,当我意识到它有时起作用而不是其他看似随意的。

所以,我在这里做了一些代码(你不必全部阅读):

import urllib2
import sys
from bs4 import BeautifulSoup

class RedirectHandler(urllib2.HTTPRedirectHandler):
    def http_error_302(self, req, fp, code, msg, headers):
        result = urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp)
        result.status = code
        return result

def pullPage():
    url = "http://shop.nordstrom.com/s/tory-burch-caroline-ballerina-flat-women/3152313?origin=category-personalizedsort&contextualcategoryid=0&fashionColor=Camellia+Pink+Beige&resultback=441"
    hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
            'Accept-Encoding': 'none',
            'Accept-Language': 'en-US,en;q=0.8',
            'Connection': 'keep-alive'} 
    req = urllib2.Request(url,headers=hdr)
    try:
        opener = urllib2.build_opener(RedirectHandler())
        webpage = opener.open(req)
        soup = BeautifulSoup(webpage, "html5lib")
        return str(soup)
    except Exception,e:
        print str(e)
        if '403' in str(e):
            sys.exit("This scraper is forbidden from this site")
        elif '[Errno -2]' in str(e):
            sys.exit("This program can not connect to the internet")
        sys.exit('Broken URL')

happy = 1
while(happy < 10):
    print len(pullPage())
    happy = happy + 1

该程序打印出网站HTML中的字符数10次。这是ouput

218531
218524
377646
218551
377646
218559
218547
376938
218552

有谁知道为什么这个网站有时几乎在代码中加倍而不是其他人?有没有办法等到整个页面加载?

我认为关注的代码是以下几行:

webpage = opener.open(req)
soup = BeautifulSoup(webpage, "html5lib")

编辑1: 其他人可以运行此代码并让我知道他们的结果是否相似?

编辑2: 我在一台单独的计算机(在谷歌服务器上)重新运行此代码得到类似的结果:

218565
218564
376937
376487
378243
218564
218557
378248
377791

1 个答案:

答案 0 :(得分:2)

可能有很多原因:

  • 可能是他们正在使用A / B测试来检查变化
  • 可能是分层结构,并非所有后端服务器都已对齐
  • 可能是他们想阻止他人偷窃并重新出售目录
  • 可能是一个有趣的代理人
  • 可能是某些杀毒软件试图帮助你
  • 可能是您的机器被注入html内容的病毒感染