这里我有一个非常简单的刮刀,用于llbean
上项目的名称import urllib2
from bs4 import BeautifulSoup
def mainTest():
url = "http://www.llbean.com/llb/shop/43281?feat=506697-GN2&page=women-s-l-l-bean-boots-10-shearling-lined&attrValue_0=Brown/Brown&productId=732934"
page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read(), "html5lib")
name = soup.find('h1', attrs={'itemprop':'name'}).text
print name
print str(soup)[:100]
mainTest()
这种刮刀通常有效。它通常打印我想要的东西:
Women's Bean Boots® by L.L.Bean, 10" Shearling-Lined
<!DOCTYPE html>
<html class="no-js" lang="en"><head>
<meta charset="utf-8"/>
<meta c
但有时打印:
None
<html><head></head><body></body></html>
这是一个非常难以重复的错误,我很抱歉。我相信问题可能在于llbean有时比我的刮刀加载更快,有时我的刮刀首先刮。
有没有人知道如何放慢我的刮刀速度?
这也可能是一个完全不同的问题。
答案 0 :(得分:0)
对我来说,代码正在运行 - 关注编码。我成功尝试了10次以上。
import urllib2
from bs4 import BeautifulSoup
def mainTest():
url = "http://www.llbean.com/llb/shop/43281?feat=506697-GN2&page=women-s-l-l-bean-boots-10-shearling-lined&attrValue_0=Brown/Brown&productId=732934"
page=urllib2.urlopen(url)
page=page.read()
soup = BeautifulSoup(page, "html5lib")
name = soup.find('h1', attrs={'itemprop':'name'}).text.encode('utf-8')
print name
print unicode(soup)[:100]
mainTest()
打印 -
Women's Bean Boots® by L.L.Bean, 10" Shearling-Lined
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8"/>
<meta content="IE=edge
答案 1 :(得分:0)
从youtube抓取一些django webapp电影列表的嵌入式URL时,我遇到了同样的问题。 我不知道是我的互联网连接速度慢还是什么原因,我的汤有时会找到该元素,有时它只会返回None, 当我在刮取该元素时得到None类型时发出另一个请求解决了我的问题...。
我的解决方法...
while(1):
try:
try to scrape your element using BeautifulSoup
except AttributeError:
print('retrying....')
else:
break
如果您的循环中断,则您获得了元素,如果您从汤中获得了None类型,它将转到except并重试(即,再次循环while循环),然后,如果汤在第二个请求中找到了该元素,如果您遇到无限循环,很明显您正在访问的元素不存在, 您还可以限制while循环,例如最多10个重试请求...