Запись очищенных заголовков с веб-страниц в рамку панд - PullRequest
0 голосов
/ 08 мая 2018

Написал этот код для загрузки заголовков h1, h2 и h3 и записи во фрейм pandas вместе со списком URL-адресов, но он выдает ошибку, поскольку ошибка распаковки предполагает 3 значения.

def url_corrector(url):
    if not str(url).startswith('http'):
        return "https://"+str(url)
    else:
        return str(url)

def header_agg(url):
    h1_list = []
    h2_list = []
    h3_list = []
    p = requests.get(url_corrector(url),proxies = proxy_data,verify=False)
    soup = BeautifulSoup(p.text,'lxml')
    for tag in soup.find_all('h1'):
        h1_list.append(tag.text)

    for tag in soup.find_all('h2'):
        h2_list.append(tag.text)

    for tag in soup.find_all('h3'):
        h3_list.append(tag.text)
    return h1_list, h2_list, h3_list

headers_frame = url_list.copy()
headers_frame['H1'],headers_frame['H2'],headers_frame['H3'] = headers_frame.url.map(lambda x: header_agg(x))

Любая помощь о том, как это сделать? Получение этой ошибки:

ValueError: too many values to unpack (expected 3)

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Предположим, что url_list является dict со следующей структурой:

url_list = {'url': [<url1>, <url2>, <url3>, <url4>, ..., <urln>]}

вызов headers_frame.url.map(lambda x: header_agg(x)) вернет список с n элементами в форме:

[<url1(h1_list, h2_list, h3_list)>, <url2(h1_list, h2_list, h3_list)>, ..., <urln(h1_list, h2_list, h3_list)>]

Для того, чтобы код выдал вам требуемый вывод, вам, возможно, придется переписать последний оператор в виде цикла

headers_frame.update({'H1':[], 'H2':[], 'H3':[]})
for url in headers_frame.url:
   headers = header_agg(url)
   headers_frame['H1'].extend(headers[0])
   headers_frame['H2'].extend(headers[1])
   headers_frame['H3'].extend(headers[2])
0 голосов
/ 08 мая 2018

Сделано это, чтобы обойти эту проблему. Однако до сих пор не уверены, почему оригинал не работает.

headers_frame = url_list.copy()
H1=[]
H2=[]
H3=[]
for url in headers_frame.url:
    k = header_agg(url)
    H1.append(k[0])
    H2.append(k[1])
    H3.append(k[2])
pd.DataFrame(np.column_stack([headers_frame.url,H1,H2,H3]))
0 голосов
/ 08 мая 2018

Вы должны вернуть одну сущность. Просто измените:

return [h1_list, h2_list, h3_list]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...