2017-06-18 50 views
0

我是新来的Python和任何类型的编码...我希望这不是太容易的问题。试图制作一个csv文件从Python中抓取数据

我想从网上的刮刮数据做一个csv文件。

AttributeError的: 'DOCTYPE' 对象有没有属性 'find_all'

但这个错误不会消失!

这里是整个代码

import bs4 as bs 
import urllib.request 


req = urllib.request.Request('http://www.mobygames.com/game/tom-clancys-rainbow-six-siege',headers={'User-Agent': 'Mozilla/5.0'}) 

sauce = urllib.request.urlopen(req).read() 

soup = bs.BeautifulSoup(sauce,'lxml') 

scores = soup.find_all("div") 

filename = "scores1.csv" 
f = open(filename, "w") 

headers = "Hi, Med, Low\n" 

f.write(headers) 

for scores in soup: 
    scoreHi = scores.find_all("div", {"class":"scoreHi"}) 
    Hi = scoreHi[0].text 
    scoreMed = scores.find_all("div", {"class":"scoreMed"}) 
    Med = scoreMed[0].text 
    scoreLow = scores.find_all("div", {"class":"scoreLow"}) 
    Low = scoreLow[0].text 

    print ("Hi: " + Hi) 

    print ("Med: " + Med) 

    print ("Low: "+ Low) 

    f.write(Hi + "," + Med.replace(",","|") + "," + Low + "\n") 


f.close() 

回答

0

你先分配给的分数:

scores = soup.find_all("div") 

这是很好的,但你应该走过去那些成绩:

for score in scores: 
    scoreHi = score.find_all("div", {"class":"scoreHi"}) 
    Hi = scoreHi[0].text 
    scoreMed = score.find_all("div", {"class":"scoreMed"}) 
    Med = scoreMed[0].text 
    scoreLow = score.find_all("div", {"class":"scoreLow"}) 
    Low = scoreLow[0].text 

尝试迭代Doc(即soup)使用:

for scores in soup: 

是没有意义的。

+0

谢谢!我不知道我是如何错过的! –

+0

如果此答案解决了您的问题,请通过单击答案旁边的✔(复选标记)来考虑*接受*。这是其他人知道你的问题已经解决的方式,没有阅读评论。它还会在列表中更改问题的外观和此答案。如果有更好的答案出现,您可以随时更改接受的答案。 – Anthon