我试图为这个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
答案 0 :(得分:2)
可能有很多原因: