#html #selenium-webdriver #beautifulsoup #python-requests
#HTML #selenium-webdriver #beautifulsoup #python-запросы
Вопрос:
Я пытаюсь извлечь электронное письмо из моего репозитория git, найденного здесь:
https://github.com/kyleschiess/Apex/commit/a32f5d426c8c51e41b891b0d35aa860f23c5b11b.patch
Решение с помощью Selenium работает отлично, где:
soup = BeautifulSoup(driver.page_source, 'lxml')
y = soup.find('pre')
text = y.text
email = re.findall(r'<(. ?)>',text)
email[0]
Дает мне ‘38440047 kyleschiess@users.noreply.github.com ‘
Это потому, что y.text не удаляет электронное письмо, которое находится между ‘<‘ и ‘>’.
Selenium выдает мне проблемы с таймаутом, поэтому я бы предпочел использовать запросы.
Теперь, с запросами, когда я делаю:
r = requests.get(patchURL)
soup = BeautifulSoup(r.text,'lxml')
y = soup.find('p') #different format for some reason
text = y.text
email = re.findall(r'<(. ?)>',text)
email[0]
Я получаю ‘2!’.
Я обнаружил, что с запросами преобразование soup в текст удаляет все между ‘<‘ и ‘>’.
В Selenium все, что не является тегом HTML, который находится между ‘<‘ и ‘>’, помещается между ‘<‘ и ‘amp; >’ … So .text не удалит электронное письмо.
Что я могу сделать, чтобы получить электронное письмо с помощью запросов или urllib или чего-либо еще?
Ответ №1:
Я думаю, это то, что вы ищете:
import requests
import re
url = "https://github.com/kyleschiess/Apex/commit/a32f5d426c8c51e41b891b0d35aa860f23c5b11b.patch"
text = requests.get(url).text
email = re.findall(r'<(. ?)>',text)[0]
print(email)
Вывод:
38440047 kyleschiess@users.noreply.github.com
Кроме того, я рассчитал время, и хотя время будет варьироваться в зависимости от скорости вашего интернет-соединения, электронное письмо извлекается примерно за треть секунды:
import requests
import re
import time
start = time.time()
url = "https://github.com/kyleschiess/Apex/commit/a32f5d426c8c51e41b891b0d35aa860f23c5b11b.patch"
text = requests.get(url).text
email = re.findall(r'<(. ?)>',text)[0]
print(email)
print(time.time() - start)
Вывод:
38440047 kyleschiess@users.noreply.github.com
0.28287720680236816
Поскольку веб-сайт не является HTML (на самом деле это просто обычный текст, насколько я могу судить), нет смысла использовать BeautifulSoup. Чтобы получить текст веб-сайта, все, что необходимо, это запустить requests.get(url).text
, затем, чтобы получить электронное письмо, вам просто нужно отфильтровать текст с помощью регулярного выражения.