Webscraper print newline - PullRequest
       35

Webscraper print newline

1 голос
/ 30 марта 2019

Я бы хотел, чтобы выходные данные моего веб-скребка были строками для каждого результата.Я хотел бы, чтобы числа разделялись запятыми.

Код:

import requests
from bs4 import BeautifulSoup
from datetime import datetime

response = requests.get('https://www.lotterycorner.com/mi/mega-millions/2019')
soup = BeautifulSoup(response.text, 'html.parser')
date = soup.find_all("td", {"class":"win-nbr-date col-sm-3 col-xs-4"})
for ultag in soup.find_all("ul",{"class":"nbr-grp"}):
    for litag in ultag.find_all('li'):
        results = (litag.get_text().replace(' ','').replace('MegaBall',''))
        print(results)
for date, results in zip(date,results):
    date2 = (date.get_text())
    date = (datetime.strptime(date2, '%b %d, %Y'))
    MegaMillions2019 = (date.strftime("%m%d%Y")+(','))
    print(MegaMillions2019)

Выход:

5 14 15 62 66 3 Megaplier3X 4 14 22 43 58 9 Megaplier3X 7 36 58 60 62 10 Megaplier3X

Я хотел бы выводбыть:

5,14,15,62,66,3 4,14,22,43,58,9 7,36,58,60,62,10

Поэтому поместите данные в одну строку, а не сложите их друг на друга, а затем удалите мегапиксель (целое число) X из конца строки.

Добавив этот код, я избавился от мегаплеера.

results2 = (results.replace('Megaplier2X','').replace('Megaplier3X','').replace('Megaplier4X','').replace('Megaplier5X',''))
        print(results2)

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Вы можете проанализировать данные следующим образом:

import requests
from bs4 import BeautifulSoup
from datetime import datetime

response = requests.get('https://www.lotterycorner.com/mi/mega-millions/2019')
soup = BeautifulSoup(response.text, 'html.parser')
date = soup.find_all("td", {"class":"win-nbr-date col-sm-3 col-xs-4"})

data = []
for ultag in soup.find_all("ul",{"class":"nbr-grp"}):
    for litag in ultag.find_all('li'):
        results = (litag.get_text().replace(' ','').replace('MegaBall',''))
        data.append(results)

parsed = []
for i in range(int(len(data)/7)):
    j = i*7
    parsed.append(data[j:j+6])

text = '\n'.join([', '.join(parsed[i]) for i in range(len(parsed))])
print(text)

Выход:

5, 14, 15, 62, 66, 3
4, 14, 22, 43, 58, 9
7, 36, 58, 60, 62, 10
10, 42, 53, 67, 68, 15
3, 29, 56, 62, 64, 4
10, 12, 16, 49, 57, 18
4, 9, 42, 62, 68, 7
15, 20, 32, 37, 52, 6
29, 33, 39, 60, 66, 21
10, 12, 14, 24, 60, 20
18, 24, 31, 34, 55, 4
17, 24, 34, 56, 65, 3
10, 38, 40, 43, 65, 12
15, 32, 39, 50, 65, 7
14, 24, 31, 42, 48, 13
3, 34, 36, 59, 66, 7
2, 37, 48, 66, 68, 11
10, 33, 53, 54, 62, 22
8, 16, 30, 38, 61, 10
4, 15, 37, 59, 64, 16
2, 43, 48, 62, 64, 24
29, 52, 58, 60, 62, 7
4, 5, 31, 62, 69, 20
13, 26, 29, 38, 64, 5
21, 29, 35, 54, 60, 15
34, 44, 57, 62, 70, 14

parsed содержит данные в списках, которые могут быть более полезными:

print(parsed)


[['5', '14', '15', '62', '66', '3'], ['4', '14', '22', '43', '58', '9'], ['7', '36', '58', '60', '62', '10'], ['10', '42', '53', '67', '68', '15'], ['3', '29', '56', '62', '64', '4'], ['10', '12', '16', '49', '57', '18'], ['4', '9', '42', '62', '68', '7'], ['15', '20', '32', '37', '52', '6'], ['29', '33', '39', '60', '66', '21'], ['10', '12', '14', '24', '60', '20'], ['18', '24', '31', '34', '55', '4'], ['17', '24', '34', '56', '65', '3'], ['10', '38', '40', '43', '65', '12'], ['15', '32', '39', '50', '65', '7'], ['14', '24', '31', '42', '48', '13'], ['3', '34', '36', '59', '66', '7'], ['2', '37', '48', '66', '68', '11'], ['10', '33', '53', '54', '62', '22'], ['8', '16', '30', '38', '61', '10'], ['4', '15', '37', '59', '64', '16'], ['2', '43', '48', '62', '64', '24'], ['29', '52', '58', '60', '62', '7'], ['4', '5', '31', '62', '69', '20'], ['13', '26', '29', '38', '64', '5'], ['21', '29', '35', '54', '60', '15'], ['34', '44', '57', '62', '70', '14']]
0 голосов
/ 30 марта 2019

Попробуйте следующее, чтобы получить требуемый результат.Вы всегда можете добавить дату позже, если это критично.

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.lotterycorner.com/mi/mega-millions/2019')
soup = BeautifulSoup(response.text, 'html.parser')
for items in soup.select(".nbr-grp"):
    [span.extract() for span in items.select("span")]
    data = [item.get_text(strip=True) for item in items.select("li:not(.nbr-txt)")]
    print(data)

Вывод вы можете получить:

['5', '14', '15', '62', '66', '3']
['4', '14', '22', '43', '58', '9']
['7', '36', '58', '60', '62', '10']
['10', '42', '53', '67', '68', '15']

Если вы хотите получить вывод без списка, попробуйте заменить его на существующий.один выше:

data = ' '.join([item.get_text(strip=True) for item in items.select("li:not(.nbr-txt)")])
...