Извлечение даты с веб-сайта с использованием Python

#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 Я думаю, что лучший способ справиться с этим — опубликовать его как отдельный вопрос.