Python передача списка из файла в questions.get () - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь почистить корпус новостной статьи для анализа. У меня есть текстовый файл со списком URL-адресов, и я пытаюсь передать их запросам, чтобы можно было очистить страницу с помощью BeautifulSoup. Я могу вытащить URL из текстового файла. Тем не менее, я не правильно передаю этот вывод в request.get (). Когда я даю request.get () явный URL, скрипт работает нормально. Как мне правильно передать request.get () список ссылок из текстового файла? Вот что у меня работает.

import requests
from bs4 import BeautifulSoup
r = requests.get("https://examplewebsite.org/page1")
coverpage = r.content
soup = BeautifulSoup(coverpage, 'html5lib')
file = open("output.txt", "w")
file.write("ITEM:")
paragraphs = soup.find_all("p")[11:-10]
for paragraph in paragraphs:
    file.write(paragraph.get_text())
    file.write("\n")
    file.write("\n")
file.close()

Однако, когда я пытаюсь прочитать из текстовый файл, который представляет собой список ссылок, похоже, проблема в том, как я передаю ссылки на запросы .get (). С одним URL на строку, список ссылок текстового файла выглядит так:

https://examplewebsite.org/page1
https://examplewebsite.org/page2
https://examplewebsite.org/page3
https://examplewebsite.org/page4

Вот как я пытаюсь проработать список ссылок.

f = open('article-list.txt', 'r')
urls = list(f)
for url in urls:
    import requests
    from bs4 import BeautifulSoup
    r = requests.get(url)
    coverpage = r.content
    soup = BeautifulSoup(coverpage, 'html5lib')
    file = open("output.txt", "w")
    file.write("ITEM:")
    paragraphs = soup.find_all("p")[11:-10]
    for paragraph in paragraphs:
        file.write(paragraph.get_text())
        file.write("\n")
        file.write("\n")
        print(paragraph.get_text())
file.close()

Я получаю сообщение об ошибке:

AttributeError: 'NoneType' object has no attribute 'get_text'

Это говорит о том, что я неправильно передаю запрос. Если я просто поменяю местами явно определенный URL-адрес, такой как «https://somewebsite.org/page1», тогда скрипт работает и записывает абзацы в файл. Тем не менее, когда я помещаю оператор print(urls) вверху и даю request.get () явную ссылку, чтобы она не ломалась, я получаю список URL. Однако этот список имеет следующий формат:

['http://examplewebsite.org/page1 \ n', 'http://examplewebsite.org/page2 \ n', 'http://examplewebsite.org/page3 \ n ']

Я думаю, что \ n - это проблема. Я попытался запустить ссылки все вместе, и это не сработало. Также для удобства чтения я бы предпочел размещать каждую ссылку на отдельной строке. Буду очень признателен за любые предложения по решению этой проблемы. Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Удаление "\ n" с использованием .rstrip () решило проблему. Приведенный ниже код работает и правильно записывает группу новостей в один текстовый файл.

import requests
from bs4 import BeautifulSoup

f = open('article-list.txt', 'r')
urls_n = list(f)
urls = [url.rstrip("\n") for url in urls_n]

for url in urls:
    import requests
    from bs4 import BeautifulSoup
    r = requests.get(url)
    coverpage = r.content
    soup = BeautifulSoup(coverpage, 'html5lib')
    file = open("output.txt", "a")
    file.write("ITEM:")
    paragraphs = soup.find_all("p")[11:-10]
    for paragraph in paragraphs:
        file.write(paragraph.get_text())
        file.write("\n")
        file.write("\n")
        print(paragraph.get_text())
file.close()
0 голосов
/ 25 апреля 2020

Чтобы получить список в том виде, в каком они есть в файле, эта строка

urls = list(f)

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

urls = f.readlines()

Она вернет массив каждой строки в текстовый файл без "\ n"

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