动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)
优采云 发布时间: 2021-09-14 22:09动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)
好的,因为我试着回答你的其他问题,虽然你没有完全解释你想要什么,我会继续。
要记住的一件事是,Selenium 正在运行您的浏览器,而不是传统的网络爬虫。这意味着,如果 url 更改不是什么大问题,那么必须更改的唯一方法是在弹出窗口出现时更改 Selenium 获取的方式。
您可以通过其他代码做的一件事是寻找航班
driver.implicitly_wait(40)//40 is the amount of seconds
这将等待至少 40 秒,然后崩溃,然后在页面加载或您接下来想要在 dom 中执行的任何操作时启动。
现在,如果你想抓取所有出现的飞行数据,这将是非常棘手的。您可以执行 for 循环并抓取页面上的每个元素,然后将其写入 csv 文件。
class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
for flights in class_for_departure_flight:
try:
with open('my_flights.csv', 'a', newline='') as flights_book:
csv_writer = csv.writer(flights_book, delimiter = ',')
csv_writer.writerow(flights.text)
except:
print("Missed a flight")
在第二部分需要注意的是,我在 Python 中使用 CSV 库来写入数据行。注意可以把一堆数据追加在一起,写成一行,如下图:
data = (flights, dates, times)
csv_writer.writerow(data)
它将正确处理电子表格中同一行上的所有这些不同内容。
另外两个容易错过的大事是:
class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
这是driver.find_元素_by_xpath,你会注意到元素是复数,这意味着它正在寻找多个具有相同class_name的对象并将它们存储在一个数组中,以便你可以在for循环迭代中匹配它们。
下一部分是 csv_writer.writerow(flights.text)。当您迭代机票时,您需要获取文本以执行此操作,您可以执行 flight.text。如果这可以仅使用搜索功能来完成,那么您也可以执行类似的操作。
class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]').text
希望这会有所帮助!