[python] 使用 Selenium 和 chromedirver 抓取网页

1 没有使用 JavaScript 的网页抓取方法

例如如下的网页:

在这里插入图片描述

1.1 安装 BeautifulSoup 库

1.2 代码例子

app.py:

import requests
from pages.quotes_page import QuotesPage

page_content = requests.get("https://quotes.toscrape.com/").content

page = QuotesPage(page_content)

for quote in page.quotes:
    print(quote)

BeautifulSoup 的使用:

from bs4 import BeautifulSoup

from locators.quotes_page_locators import QuotesPageLocators
from parsers.quote import QuoteParser

class QuotesPage:
    def __init__(self, page):
        self.soup = BeautifulSoup(page, 'html.parser')

    @property
    def quotes(self):
        locator = QuotesPageLocators.QUOTE
        quote_tags = self.soup.select(locator)
        return [QuoteParser(e) for e in quote_tags]

quote.py, 即 parser,解析含有单个quote的HTML:

from locators.quote_locators import QuoteLocators

class QuoteParser:
    """
    Given one of the specific quote divs, find out the data
    about the quote (quote content, author, tags).
    """
    def __init__(self, parent):
        self.parent = parent

    def __repr__(self):
        return f'<Quote {self.content} by {self.author}>'

    @property
    def content(self):
        locator = QuoteLocators.CONTENT
        return self.parent.select_one(locator).string

    @property
    def author(self):
        locator = QuoteLocators.AUTHOR
        return self.parent.select_one(locator).string

    @property
    def tags(self):
        locator = QuoteLocators.TAGS

        # select all available individual tags
        return [e.string for e in self.parent.select(locator)]

2 抓取使用了 JavaScript 的网页

这些网页需要执行 JavaScript 才能生成需要的内容,如下的网页:
在这里插入图片描述
需要执行 3 步操作才能获得 quote,首先需要选择 author,然后选择 tag,最后点击 search 按钮,才会显示相应的 quote:

在这里插入图片描述
使用 Selenium 和 chromedriver 可以使用代码执行这些原本需要手动才能完成的操作,然后再抓取相应的网页数据,实现浏览器自动化。

2.1 下载 chromedriver

https://chromedriver.chromium.org/downloads
下载前,需要chekc自己使用的chrome的版本,例如 chrome 103, chrome 104 都对应不同的 chromedriver,要选择正确的版本。

2.2 chromedriver 压缩包解压

然后将 chromedriver.exe 放置在某个位置,将来要使用其所在路径。

2.3 安装 Selenium

当前的最新版本是 4.3.0,安装的是这个版本,不同的版本,API 也会变化。

2.4 代码例子 app.py:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

from pages.quotes_page import QuotesPage

chrome = webdriver.Chrome(service=Service("chromedriver.exe"))
chrome.get("https://quotes.toscrape.com/search.aspx")
page = QuotesPage(chrome)

author = input("Enter the author you'd like quotes from: ")
page.select_author(author)

tags = page.get_available_tags()
print("Select one of these tags: [{}]".format(' | '.join(tags)))
selected_tag = input("Enter your tag: ")

page.select_tag(selected_tag)

page.search_button.click()
print(page.quotes)

测试界面:
在这里插入图片描述

无论使用 BeautifulSoup 还是 使用 Selenium 抓取网页,都是要分析 HTML 文件,再使用 CSS selector 定位 HTML 代码中需要的数据,再调用 library 中的函数读取数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值