c语言编程笔录

首页 >   > 笔记大全

笔记大全

Python动态爬虫 轻松抓取网页内容

更新时间:2023-11-17

Python动态爬虫 轻松抓取网页内容

Python动态爬虫可以用来抓取动态网页的数据。网页内容有两种类型:静态和动态。静态网页是指网站的内容是固定的,无法实时更新。但是动态网页是根据用户的交互行为动态地更新内容。这些网站的内容一般基于 JavaScript 兼容的浏览器,并使用 AJAX 异步加载数据。

Python具有强大的爬虫库来获取动态网页的数据,比如BeautifulSoup,Scrapy和Selenium等。这些库可以模拟用浏览器访问网页的行为,从而获取动态网页的内容并进行处理。这里我们重点介绍Selenium。

Selenium

Selenium是一种用于Web应用程序测试的工具。然而,同样可以利用它来进行Web爬取。Selenium WebDriver是基于浏览器直接进行操作的,Selenium启动浏览器并进行模拟操作,自动访问页面,并从渲染后的源代码中提取有用的信息。

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.baidu.com')

input_ = browser.find_element_by_id('kw')
input_.send_keys('python')
input_.submit()

print(browser.page_source)
browser.close()

以上代码演示了如何利用 Selenium 在百度搜索框中搜索关键字'python'。

抓取Ajax数据

许多网站使用Ajax技术更新网页内容。初始网页加载后,该网站使用Ajax从服务器请求数据,然后用JavaScript将这些数据添加到初始网页上。它允许页面只加载一次,但可以随着用户的操作而更新数据,并提供更好的用户体验。但这样带来的问题是,Selenium在页面加载完成后直接停止,所以无法获取ajax请求后渲染的数据。解决方案是Selenium使用 'WebDriverWait' 模块来等待后台Ajax请求的响应。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get('http://www.example.com')

try:
    element = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "exampleID"))
    )
finally:
    print(browser.page_source)
    browser.close()

提交表单

对于需要登录或填写表单的网站,我们需要提交表单才能获取到数据。下面是一个提交表单的示例:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://example.com')

username = browser.find_element_by_name('username')
password = browser.find_element_by_name('password')

username.send_keys('example_username')
password.send_keys('example_password')

submit = browser.find_element_by_name('submit')
submit.click()

print(browser.page_source)

browser.close()

以上代码演示了如何利用 Selenium 实现表单提交。首先通过find_element_by_name 找到表单中的控件,然后通过 send_keys 方法给控件赋值,最后点击提交按钮,即可成功提交表单。