Python Web抓取不起作用

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

我是Python新手,正在尝试做一些web抓取。我正试图从一个关于《皇家冲突》的网站上获得一些东西,比如牌组名称、用户名、长生不老药成本和牌。我获取数据,然后将其发送到项目目录中名为“data”的文件夹中。文件创建得很好,但每个.json文件中都有空括号[]。我不知道我做错了什么。任何帮助都将不胜感激。谢谢代码如下:

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转储,您会得到一个错误。