【发布时间】:2019-08-01 05:55:07
【问题描述】:
希望我能找到你。
作为 Python 和网络抓取的新手,我希望您能帮助我了解我在从事的项目中遇到的问题。
为了给您提供一些背景信息,我目前正在设计一个脚本,该脚本允许居住在法国的个人自动检查可用的时间段,以便为他们居住的地区的法国公民申请流程安排预约。由于时间段非常难以获得,并且根据用户反馈,时间段来来往往很快,因此该过程成为许多人不断沮丧的根源。
下面的代码摘自连接到学区网站、选择可用摊位并返回可用性页面的“action”参数的脚本。 time.sleep 函数用于避免网站使用的代理过载(因为它容易出现 502 错误),我正在打印当前 url 和操作值以验证它们是否与浏览器中的值对齐:
from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import time
url = "http://www.hauts-de-seine.gouv.fr/booking/create/4462/1"
booth_selection = "//input[@value='7070'][@name='planning']"
booking_selector = "//input[@value='Etape suivante'][@name='nextButton']"
browser = webdriver.Safari()
browser.maximize_window()
browser.get(url)
time.sleep(5)
booth_selection = browser.find_element_by_xpath(booth_selection)
booth_selection.click()
time.sleep(5)
booking_submit = browser.find_element_by_xpath(booking_selector)
booking_submit.click()
browser.implicitly_wait(5)
page = browser.current_url
print(page)
agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}
page_response = requests.get(page, headers=agent)
soup = BeautifulSoup(page_response.text, 'lxml')
action = soup.find('form', id='FormBookingCreate').get('action')
print(action)
time.sleep(10)
browser.close()
不幸的是,情况似乎并非如此,因为:
- 作为 URL,我仍然得到相同的起始 URL,而不是“http://www.hauts-de-seine.gouv.fr/booking/create/4462/2”
- 对于操作值,我得到的是“/booking/create/4462/1”而不是“/booking/create/4462/2”,这导致我假设我将无法抓取结果的 HTML网址。
这是 Safari 的控制台截图供参考:HTML code of resulting page
您能帮我理解为什么会这样吗?可以做些什么来解决这个问题?
提前致谢。
【问题讨论】:
-
为什么使用请求?你不能直接把 browser.page_source 传给 BeautifulSoup 吗?
标签: python selenium selenium-webdriver web-scraping scripting