#python #csv #web-scraping #data-science
#python #csv #очистка веб-страниц #наука о данных
Вопрос:
# Find string between two strings
def find_between( s, first, last ):
try:
start = s.index( first ) len( first )
end = s.index( last, start )
return s[start:end]
except ValueError:
return ""
from urllib.request import urlopen
from lxml import html
import requests
link = "https://www.calendar-12.com/catholic_holidays/2019"
response = urlopen(link)
content = response.read().decode("utf-8")
table = find_between(content, "<tbody>","</tbody>");
rows = table.split("/tr")
csv = "Dayn"
for row in rows:
day = find_between(row, '">', "</t")
day = find_between(day, "> ", "</")
csv = csv day "n"
print(csv)
Этот код предполагает извлечение даты с веб-сайта, но это не так, можете ли вы помочь решить проблему. единственным результатом является день
Комментарии:
1. Пожалуйста, покажите функцию
find_between
Ответ №1:
Если я правильно понимаю ваш вопрос, это должно сработать:
import lxml.html as lh
import requests
link = "https://www.calendar-12.com/catholic_holidays/2019"
req = requests.get(link)
doc= lh.fromstring(req.text)
tab = doc.xpath('//table')[0]
rows = []
for t in tab.xpath('.//tr[@class]//td/a'):
row = []
row.extend(t.text.strip().replace('day,','day,xxx').split('xxx'))
rows.extend(row)
for day,date,holiday in zip(rows[0::3],rows[1::3],rows[2::3]):
print(day,date,holiday)
#EDIT:
#or to store these in variables:
a,b,c = day,date,holiday
print(a,b,c)
Вывод:
Tuesday, January 1, 2019 Solemnity of Mary, Mother of God
Sunday, January 6, 2019 Epiphany
Tuesday, March 5, 2019 Shrove Tuesday (Mardi Gras)
Wednesday, March 6, 2019 Ash Wednesday
и т.д.
Комментарии:
1. Спасибо за ваше решение, но как сохранить результат в переменной.
2. @GBU-43BNAVY Смотрите редактирование; это должно быть сделано, если я вас правильно понимаю.
3. Мне нужно создать набор данных дня и даты (день, дата) из календаря веб-сайта. Как я могу создать набор данных из выходных данных цикла for. Я признателен, если вы можете мне в этом помочь.
4. Или как я могу добавить день, дату после каждого цикла в список или строку, которые я могу использовать для создания набора данных позже.
5. @GBU-43BNAVY Я думаю, что лучший способ справиться с этим — опубликовать его как отдельный вопрос.