Python Web抓取不起作用
我是Python新手,正在尝试做一些web抓取。我正试图从一个关于《皇家冲突》的网站上获得一些东西,比如牌组名称、用户名、长生不老药成本和牌。我获取数据,然后将其发送到项目目录中名为“data”的文件夹中。文件创建得很好,但每个.json文件中都有空括号[]。我不知道我做错了什么。任何帮助都将不胜感激。谢谢代码如下:Python Web抓取不起作用,python,json,web-scraping,beautifulsoup,Python,Json,Web Scraping,Beautifulsoup,我是Python新手,正在尝试做一些web抓取。我正试图从一个关于《皇家冲突》的网站上获得一些东西,比如牌组名称、用户名、长生不老药成本和牌。我获取数据,然后将其发送到项目目录中名为“data”的文件夹中。文件创建得很好,但每个.json文件中都有空括号[]。我不知道我做错了什么。任何帮助都将不胜感激。谢谢代码如下: from bs4 import BeautifulSoup import requests import uuid import json import os.path from
from bs4 import BeautifulSoup
import requests
import uuid
import json
import os.path
from multiprocessing.dummy import Pool as Threadpool
def getdata(url):
save_path=r'/Users/crazy4byu/PycharmProjects/Final/Data'
clashlist=[]
html = requests.get(url).text
soup = BeautifulSoup(html,'html5lib')
clash = soup.find_all('div',{'class':'row result'})
for clashr in clash:
clashlist.append(
{
'Deck Name':clashr.find('a').text,
'User':clashr.find('td',{'class':'user center'}).text,
'Elixir Cost':clashr.find('span',{'class':'elixir_cost'}).text,
'Card':clashr.find('span',{'class':None}).text
}
)
decks = soup.find_all('div',{'class':' row result'})
for deck in decks:
clashlist.append(
{
'Deck Name':clashr.find('a').text,
'User':clashr.find('td',{'class':'user center'}).text,
'Elixir Cost':clashr.find('span',{'class':'elixir_cost'}).text,
'Card':clashr.find('span',{'class':None}).text
}
)
with open(os.path.join(save_path,'data_'+str(uuid.uuid1())+'.json'),'w') as outfile:
json.dump(clashlist,outfile)
if'__main__' == __name__:
urls=[]
urls.append(r'http://clashroyaledeckbuilder.com/clashroyale/deckViewer/highestRated')
for i in range(20,990,10):
urls.append(r'http://clashroyaledeckbuilder.com/clashroyale/deckViewer/highestRated'+str(i))
pool = Threadpool(25)
pool.map(getdata, urls)
pool.close()
pool.join()
您正在查看的url无效。对page=0,1,2,3…etcOkay进行分页,这对最后一部分有效吗?我仍然没有得到任何数据<代码>如果“\uuuuuu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuhttp://clashroyaledeckbuilder.com/clashroyale/deckViewer/highestRated')表示范围(20990,10)内的i:url.append(r'http://clashroyaledeckbuilder.com/clashroyale/deckViewer/highestRated/?page='+str(i))pool=Threadpool(25)pool.map(getdata,url)我们没有太多的信息来调试它。如果正在创建文件,而您得到的是空括号,则您的clashlist为空。为什么你的键盘列表是空的?你的甲板变量或碰撞变量都是一个空列表。放入一些调试语句,看看会发生什么。注意:如果调试一个多进程的应用程序很难(确实如此!),那么就把它设为一个进程。然后,一旦您在多处理中有了工作的add。因此,我发现soup.find_all语句中的类是错误的,所以我将其更改为
clash=soup.find_all('tr',{'class':'deck link'})
但我在运行它时出错,说:“AttributeError:'NoneType'对象没有属性'text'”,我接受了“.text”然后再次运行它,我得到了另一个错误:“TypeError:4.3不是JSON可序列化的”这意味着什么?你应该阅读错误,它们提供了信息!“非类型对象没有属性文本”表示您正在尝试访问非对象上的文本方法。IE:您的一个find函数返回None,因为它找不到任何东西。为了找出是哪一个,可以使用调试器或一些明智的打印语句。.text函数返回该对象中包含的文本。删除文本函数后,您试图将不可json序列化的对象作为json转储,结果出现错误。您查看的url无效。对page=0,1,2,3…etcOkay进行分页,这对最后一部分有效吗?我仍然没有得到任何数据<代码>如果“\uuuuuu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuhttp://clashroyaledeckbuilder.com/clashroyale/deckViewer/highestRated')表示范围(20990,10)内的i:url.append(r'http://clashroyaledeckbuilder.com/clashroyale/deckViewer/highestRated/?page='+str(i))pool=Threadpool(25)pool.map(getdata,url)我们没有太多的信息来调试它。如果正在创建文件,而您得到的是空括号,则您的clashlist为空。为什么你的键盘列表是空的?你的甲板变量或碰撞变量都是一个空列表。放入一些调试语句,看看会发生什么。注意:如果调试一个多进程的应用程序很难(确实如此!),那么就把它设为一个进程。然后,一旦您在多处理中有了工作的add。因此,我发现soup.find_all语句中的类是错误的,所以我将其更改为clash=soup.find_all('tr',{'class':'deck link'})
但我在运行它时出错,说:“AttributeError:'NoneType'对象没有属性'text'”,我接受了“.text”然后再次运行它,我得到了另一个错误:“TypeError:4.3不是JSON可序列化的”这意味着什么?你应该阅读错误,它们提供了信息!“非类型对象没有属性文本”表示您正在尝试访问非对象上的文本方法。IE:您的一个find函数返回None,因为它找不到任何东西。为了找出是哪一个,可以使用调试器或一些明智的打印语句。.text函数返回该对象中包含的文本。当您删除文本函数时,您试图将一个不可json序列化的对象作为json转储,您会得到一个错误。