Удалить NoneType из BeautifulSoup - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь удалить запятые из чисел, которые я извлек с помощью следующего кода:

with requests.Session() as s:
    url = 'https://www.zoopla.co.uk/for-sale/property/london/paddington/?q=Paddington%2C%20London&results_sort=newest_listings&search_source=home'
    r = s.get(url, headers=req_headers)
    soup = BeautifulSoup(r.content, 'lxml')
    prices = []
    for price in soup.find_all('a', {"class":"listing-results-price text-price"}):
        prices.append(price.text)
        if price is None:
            print('none')
    df['price'] = prices
    df['price'] = df['price'].str.extract('(\d+([\d,]?\d)*(\.\d+)?)', expand=True) #remove extract numbers with commas
    df['price'] = df['price'].replace(',','', inplace = True)

Возвращает столбец, в котором все значения равны None.Есть ли способ удалить эту ошибку NoneType?

Перед тем, как запустить последнюю строку, фрейм данных выглядит следующим образом:

         price
0          NaN
1    1,875,000
2    4,950,000
3      500,000
4      675,000
5      980,000
6      475,000
7      849,950
8    1,050,000
9    1,050,000
10     650,000
11   1,100,000
12   1,300,000
13     895,000
14   1,000,000
15  26,800,000
16   1,600,000
17     695,000
18   2,100,000
19     510,000
20   1,200,000
21   3,000,000
22     599,000
23  26,800,000
24   1,550,000
25     750,000
26   1,600,000
27   1,025,000

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я предлагаю вам обработать его в конце извлечения данных, прежде чем создавать фрейм данных. Вы можете создать свой список следующим образом:

from bs4 import BeautifulSoup
import requests
url = 'https://www.zoopla.co.uk/for-sale/property/london/paddington/?q=Paddington%2C%20London&results_sort=newest_listings&search_source=home'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')
res_lis = [int(price.text.strip().split('\n')[0].replace('£', '').replace(',', '')) for price in soup.find_all('a', {"class":"listing-results-price text-price"}) if price]
print(res_lis)

результат:

[2000000, 549950, 1050000, 500000, 675000, 980000, 475000, 849950, 1050000, 1050000, 650000, 1100000, 1300000, 895000, 1000000, 26800000, 1600000, 695000, 2100000, 510000, 3000000, 1200000, 599000, 26800000, 1550000, 750000, 1600000, 1025000]

Всегда лучше, если выПостроить / манипулировать всеми данными в соответствии с требованиями, насколько это возможно, прежде чем сохранять их, что будет вашей фазой извлечения данных, а затем

0 голосов
/ 05 июня 2018

С df['price'].replace(',','', inplace = True) вы заменяете inplace, который ничего не возвращает.

Вам необходимо:

df['price'] = df['price'].str.replace(',','')

Вывод:

0        NaN
1    1875000
2    4950000
3     500000
4     675000
5     980000
6     475000
7     849950
8    1050000
9    1050000

Для справки взгляните на документы

...