Я не могу экспортировать вывод bs4 в файл - PullRequest
0 голосов
/ 04 мая 2020


Я только начал изучать скребки и пытаюсь экспортировать ссылки в текстовый файл
, но я застрял с ошибкой

TypeError: a bytes-like object is required, not 'str'

вот мой код:

from bs4 import BeautifulSoup as bs
import requests

def get_links():
    url = 'https://arxiv.org/list/math/new'
    page = requests.get(url)
    data = page.text
    soup = bs(data, 'html.parser')

    for link in soup.find_all('a'):
        links = link.get('href')

        with open('urlfile.txt','wb') as f:
            f.write(links)

get_links()

Может кто-нибудь объяснить мне, что происходит, и как я могу это исправить? :)

1 Ответ

2 голосов
/ 04 мая 2020

Ну, что не так в этой части:

for link in soup.find_all('a'):
    links = link.get('href')

    with open('urlfile.txt','wb') as f:
        f.write(links)

Сначала вы пытаетесь записать строку в файл, открытый в двоичном режиме ('wb') - вам не нужен двоичный файл Режим здесь.

Во-вторых, вы go через все a href ссылки с вашим l oop, и для каждой ссылки вы открываете один и тот же файл для записи. Таким образом, даже если вы исправите проблему с режимом, вы перезапишете свою предыдущую ссылку следующей - в конце в файле останется только последняя ссылка. Вам нужно переместиться open за пределы l oop. И, наконец, возможно, стоит добавить разделитель (\n) после каждой ссылки, которую вы пишете ...

    with open('urlfile.txt','w') as f:
        for link in soup.find_all('a'):
            links = link.get('href')
            if links:
                f.write(links + '\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...