Как использовать составную строку для получения метода запросов? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь написать небольшой сканер для сканирования нескольких страниц википедии. Я хочу сделать сканирование несколько динамичным, объединяя гиперссылку для точной вики-страницы из файла, который содержит список имен. Например, в первой строке «deutsche_Schauspieler.txt» написано «Альфред Абель», и объединенная строка будет «https://de.wikipedia.org/wiki/Alfred Абель». Использование txt-файла приведет к тому, что заголовок будет отсутствовать, но когда я завершу ссылку строкой внутри скрипта, это сработает.

Это для Python 2.x. Я уже пытался переключиться с "на", пробовал + вместо% s попытался поместить всю строку в текстовый файл (чтобы первая строка читалась как «http: // ...» вместо «Альфред Абель» попытался переключиться с "Альфред Абель" на "Альфред_Абель

from bs4 import BeautifulSoup
import requests

file = open("test.txt","w")
f = open("deutsche_Schauspieler.txt","r")

content = f.readlines()

for line in content:    
    link = "https://de.wikipedia.org/wiki/%s" % (str(line))
    response = requests.get(link)
    html = response.content
    soup = BeautifulSoup(html)
    heading = soup.find(id='Vorlage_Personendaten')
    uls = heading.find_all('td')
    for item in uls:
        file.write(item.text.encode('utf-8') + "\n")

f.close()
file.close()

Я ожидаю получить содержимое таблицы "Vorlage_Personendaten", которая действительно работает, если я изменю строку 10 на

link = "https://de.wikipedia.org/wiki/Alfred Abel"
# link = "https://de.wikipedia.org/wiki/Alfred_Abel" also works

Но я хочу, чтобы он работал с использованием текстового файла

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Я нашел решение сам. Хотя в файле нет никаких дополнительных строк, массив содержимого выглядит следующим образом ['Альфред Абель \ n'], но распечатка первого индекса массива приведет к 'Альфреду Абелю'. Это все еще интерпретируется как строка в массиве, таким образом формируя ложную ссылку. Итак, вы хотите переместить последний (!) Символ из текущей строки. Решение может выглядеть так:

from bs4 import BeautifulSoup
import requests

file = open("test.txt","w")
f = open("deutsche_Schauspieler.txt","r")

content = f.readlines()
print (content)
for line in content:    
    line=line[:-1] #Note how this removes \n which are technically two characters
    link = "https://de.wikipedia.org/wiki/%s" % str(line)
    response = requests.get(link)
    html = response.content
    soup = BeautifulSoup(html,"html.parser")
    try:
        heading = soup.find(id='Vorlage_Personendaten')
        uls = heading.find_all('td')
        for item in uls:
            file.write(item.text.encode('utf-8') + "\n")
    except:
        print ("That did not work")
        pass

f.close()
file.close()
0 голосов
/ 16 мая 2019

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

uls = heading.find_all ('td') AttributeError: 'NoneType'У объекта нет атрибута' find_all '

Удалите строковые кавычки "Alfred Abel" и используйте Alfred Abel внутри текстового файла deutsche_Schauspieler.txt.это будет работать как положено.

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