следующее не обязательно вопрос. Я создал небольшой фрагмент кода для извлечения данных с веб-страницы, и я хочу знать, что вы думаете о коде и как его улучшить.python web scraping внутри html commets
Мне нужно знать даты собеседования для кандидата. Они не отправляют нам электронные письма. Here они отправят даты. Я понял, что две интересующие меня должности доктора философии находятся внутри комментариев HTML. Оба они начинаются со строки URBAN.
Я создал регулярное выражение, чтобы найти все комментарии
regex = r"<!--(.*?)-->"
и используется цикл для проверки внутри этих замечаний существование слов ГОРОДСКИХ. Отсутствие строки в комментарии означает, надеюсь, что они отправили даты.
Это мой код:
import requests, re, time, smtplib
url = "http://dottorato.polito.it/Esami_accesso.html"
DEBUG = False
foundInComment = True
"""
. matches anything but \n
* 0 or more occurrences of the pattern to its left
() groups
? for non-greedy
"""
regex = r"<!--(.*?)-->"
while foundInComment:
try:
r = requests.get(url)
html = r.text
result = re.findall(regex,html,re.DOTALL) # re.DOTALL makes . match also \n
for match in result:
if len(re.findall("URBAN",match)) > 1: #One of the commets has to have at least two URBAN
foundInComment = True
print("\"URBAN AND REGIONAL DEVELOPMEN\" found more than once in a comment at "
+ time.strftime("%H:%M:%S"))
break
foundInComment = False
time.sleep(600)
except KeyboardInterrupt:
raise
except Exception as e:
print e
print "Going to sleep for 1 min"
time.sleep(60)
if not DEBUG:
fromaddr = '[email protected]'
toaddrs = ['[email protected]', fromaddr]
msg = 'Subject: PHD polito\n\n Go to %s' % url
# Credentials
username = 'someone'
password = 'password'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
print "End of program"
Итак, что же вы думаете?
Заранее благодарен!
PS: это часть HTML комментарии, содержащие слова URBAN:
<li><a href="colloqui/Architettura_Storia_Progetto2.pdf">URBAN AND REGIONAL DEVELOPMEN</a></li>
<li><a href="colloqui/Architettura_Storia_Progetto2.pdf">URBAN AND REGIONAL DEVELOPMEN - Cluster Tecnologie per le Smart Communities - Progetto Edifici a Zero Consumo Energetico in Distretti Urbani Intelligenti</a></li>
-->
Я почти уверен, что они будут копировать это и вставить его из комментария внутри веб-страницы.
Это большой шаг вперед. Как насчет обработки ошибок? Это общий. Я не знал, как поймать все исключения запросов. 'request.exceptions.RequestException' было недостаточно. –
@TharekM хорошо, 'RequestException' является базовым исключением для всех исключений, которые' request' имеет. Что было, когда этого было недостаточно? Благодарю. – alecxe
Я нашел [это] (https://github.com/kennethreitz/requests/issues/1236). Он говорит: «socket.timeout выбрасывается вместо request.exceptions.Timeout». Я попытался добавить 'except socket.timeout', но это неправильный способ справиться с этим исключением. Спасибо. –