Webscraper,将列表提取到.json?

时间:2018-06-04 09:12:36

标签: json python-3.x

我正在尝试搜索网站(www.cashpoint.dk)以获取赔率和其他相关信息。

如果我想提取输出,有人可以帮助我做什么 打印((下注['team1'],下注['team2'],下注['bettext'],下注['tiptext'],下注['tip']))到.json文件,包含所有赔率和文字?

我希望这个结构对你有意义,如果代码看起来很糟糕我很抱歉,我是python和编码的新手。

import demjson
import json
import io
import re
from bs4 import BeautifulSoup
import requests

url = "https://www.cashpoint.dk/en/?r=bets/xtra&group=461392&game=312004790"
print(url)

r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')

class Scraper():

    def __init__(self):

        self.tables = soup.select('table.sportbet_extra_list_table')

        for table in self.tables:
            self.fields = table.select('.sportbet_extra_rate_content')
            for field in self.fields:
                self.js_obj = re.search('{.+}', field['onclick']).group()
                self.bet = demjson.decode(self.js_obj)

                print((self.bet['team1'], self.bet['team2'], self.bet['bettext'], self.bet['tiptext'], self.bet['tip']))

    def parseJSON(self):
        try:
            self.to_unicode = unicode
        except NameError:
            self.to_unicode = str

        # Define data
        self.data = {

        'dictionary:': { 
                        'tip':      str(self.bet['tip']),
                        'team1':    str(self.bet['team1']), 
                        'team2':    str(self.bet['team2']), 
                        'bettext':  str(self.bet['bettext']), 
                        'odds':     str(self.bet['odd']),
                        }
        }

        # Write JSON file
        with io.open('data.json', 'w', encoding='utf8') as outfile:
            self.str_ = json.dumps(self.data,
                              indent=4, sort_keys=True,
                              separators=(',', ': '), ensure_ascii=True)
            outfile.write(self.to_unicode(self.str_))

        # Read JSON file
        with open('data.json') as data_file:
            self.data_loaded = json.load(data_file)

        print(self.data == self.data_loaded)

Scraper()

我试图抓取的HTML代码:

<table class="sportbet_extra_list_table" id="mc-ga312004790">
    <tbody>
        <tr>
            <td class="sportbet_extra_c0"></td>
            <td class="sportbet_extra_c1"><span>
                <a class="combi_1"></a>
                Hvem vinder kampen?                            </span></td>
            <td class="sportbet_extra_c2">
			                <div id="mc-ti312004790_1" class="js-ti312004790_1 sportbet_extra_rate_content" onclick="Bettingslip.addBet({type: 'N', team1: 'Rusland', team2: 'Saudi Arabien', bettext: 'Hvem vinder kampen?', combi_cat: 1, sub_group: 0, game: 312004790, groupId:461392, leagueId:30124, odd: 138, odd_id: 312004790, tiptext: '1', tip: 1, betstyle: 2224})">
                    <div class="sportbet_content_rate_left">1</div>
                    <div class="sportbet_content_rate_right">1,38</div>
                </div>
				
            </td>

如果有人能想出一个很好的方法来为它制作一个结构,那就太开心了!

1 个答案:

答案 0 :(得分:0)

Perhap你应该看看Scrapy,这个工具允许你通过juste创建一个解析器(就像你做的那样)来废弃网站,并将创建的项目导出到你想要的格式。

您必须创建SpiderItem来存储您的信息,然后使用以下命令运行抓取:

scrapy crawl 'your_parser_name' -t json -o '/path/to/your/file.json'