#python #python-3.x #web-scraping #python-requests
#python #python-3.x #очистка веб-страниц #python-запросы
Вопрос:
Я пытаюсь очистить табличное содержимое с веб-страницы. Проблема в том, что когда я использую жестко закодированные файлы cookie из браузера в заголовках скрипта, я вижу табличное содержимое в консоли, в противном случае, когда я избавляюсь от файлов cookie, я получаю 200 ответов без требуемого содержимого. К тому времени, когда я вставил сюда код, срок действия файлов cookie, возможно, уже истек.
import requests
from bs4 import BeautifulSoup
link = 'https://www.health.gov.il/Subjects/KidsAndMatures/child_development/Pages/ADHD_experts.aspx'
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36",
"Cookie":'ASP.NET_SessionId=hsqyvzg5jgkzfvzadzsyxdwx; p_hosting=! bizF/4qwD7oEFze0NvCZLoPxuY/qnj9vRDa16ox8qkWDZTqjX1X9ZUoroByq7ynIZpFpUltU2jMCtk=; _ga=GA1.3.2020672306.1604911293; _gid=GA1.3.1145592749.1604911293; _hjTLDTest=1; _hjid=b62d7912-acfd-4ded-8a37-ae8b333fec04; WSS_FullScreenMode=false; _hjIncludedInPageviewSample=1; BotMitigationCookie_14016509088757896949="210109001604917723jho9/3TYoZILQoHOaZvAPwJt1Q8="; _gat_UA-72144815-4=1'
}
r = requests.get(link,headers=headers)
print(r.status_code)
soup = BeautifulSoup(r.text,"lxml")
print(soup.select_one('table:has(> caption.resultsSummaryPhones)'))
Как я могу получить табличное содержимое с помощью запросов без использования жестко закодированных файлов cookie?
Комментарии:
1. Не могли бы вы добавить альтернативный URL-адрес вышеуказанного URL-адреса, где содержимое веб-сайта на английском языке
2. Извините @Vin, это единственная ссылка, которая у меня есть. Я пытаюсь получить ответ с требуемым содержимым. С остальным я справлюсь сам.
Ответ №1:
Если вы не хотите использовать жестко запрограммированные файлы cookie, вы можете рассмотреть возможность использования selenium
с webdriver
headless
режимом in.
Например:
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.get('https://www.health.gov.il/Subjects/KidsAndMatures/child_development/Pages/ADHD_experts.aspx')
time.sleep(1)
soup = BeautifulSoup(driver.page_source, "html.parser").select_one('table:has(> caption.resultsSummaryPhones)')
phone_numbers = [
n.getText(strip=True) for n
in soup.find_all("td", {"class": "phoneBookListWorkPhone"})
if n.getText(strip=True)
]
print(phone_numbers)
Вывод:
['02-5630147', '08-9330328', '03-6287200', '08-9703940', '08-8505515', '02-6413026', '04-6727000', '03-6302211', '04-8377717', '02-9939555 02-5887300', '04-9551155', '074-7034622']