Title сайтов из списка в файле
Можно ли, чтобы r = requests.get брал адреса сайтов из файла? Или же мне надо создать массив с адресами сайтов? Там просто их более 400
import requests
from lxml import html
from bs4 import BeautifulSoup
with open("sites.txt", "r") as fp:
lines = fp.readlines()
r = requests.get(lines)
with open('html.html', 'w', encoding="utf-8") as output_file:
output_file.write(r.text)
html = open('html.html', encoding="utf-8").read()
soup = BeautifulSoup(html, 'lxml')
title = soup.find('title')
print(title)
Мне нужен title всех сайтов из списка
Ответы (1 шт):
Можно ли, чтобы r = requests.get брал адреса сайтов из файла? Или же
Нельзя, он принимает только строку-адрес сайта
мне надо создать массив с адресами сайтов?
Угу (вариант с .readlines()), либо, если серьезные ограничения по памяти, то можно сделать перебор строк из файла в цикле
Пример:
import requests
from bs4 import BeautifulSoup
with open("sites.txt") as f:
lines = f.readlines()
for line in lines:
url = line.strip()
rs = requests.get(url)
soup = BeautifulSoup(rs.content, 'html.parser')
title = soup.find('title')
print(title.get_text(strip=True))
PS.
url = line.strip()тутstripиспользуется, чтобы убрать пробелы и символы перехода на новую строку\n, аreadlinesобязательно их вернетsoup = BeautifulSoup(rs.content, 'html.parser')- нет смысла сохранять в файл ответ от запроса, поэтому сразу используется
rs.contentвозвращает ответ как байтовый массив, это дастBeautifulSoupсамому определить кодировку из ответа'html.parser'это питоничий парсер html, нет нужды использовать сторонние библиотеки, типаlxml
get_text(strip=True)метод возвращает текстовое представление элемента с удалением пробельных символов (аналог.strip())