Py学习  »  Python

Python爬虫实战,Selenium爬取全本小说

蚂蚁学Python • 1 年前 • 946 次点击  

爬取目标

随便打开一个盗版小说网站,爬取策略和样式都差不多。

例如:https://www.00ksw.com/html/3/3804/

爬取目标,把这个小说,爬取存储到本地的Txt文件

Selenium代码

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

url = "https://www.00ksw.com/html/3/3804/"

from selenium.webdriver import Chrome

from selenium.webdriver.chrome.options import Options

# 创建Chrome浏览器的配置选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 设置为无头模式

# 初始化Chrome浏览器对象
driver = Chrome(options=chrome_options)

driver.get(url)
# print(driver.page_source)

wait = WebDriverWait(driver, 10)
wait.until(lambda d: "ml_list" in d.page_source)


# print(driver.page_source)

def get_content(url):
    driver.get(url)
    wait.until(lambda d: "articlecontent" in d.page_source)
    return driver.find_element(By.XPATH, "//div[@id='articlecontent']").text


links = driver.find_elements(By.XPATH, "//div[@class='ml_list']//ul//li//a")

datas = []
for link in links:
    content_url = link.get_attribute("href")

    title = link.text

    datas.append([title, content_url])

with open("结果.txt""w", encoding="utf8"as f:
    for title, content_url in datas:
        content = get_content(content_url)
        print(title, content_url)
        f.write(title + "\n")
        f.write(content + "\n")

        f.flush()

driver.close()

爬取效果


WebDriverWait的知识补充

WebDriverWait 是 Selenium 中的一个等待类,用于实现显式等待。

通过 WebDriverWait,可以告诉 WebDriver 在一定时间内等待某个条件成立后再执行下一步操作。

下面是 WebDriverWait 的基本用法示例:

导入必要的模块:

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

创建 WebDriverWait 实例:




    
# 等待最多10秒
wait = WebDriverWait(driver, 10)

使用 WebDriverWait 等待某个条件:

# 等待直到元素可见
element = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@id='example']")))

预定义的等待条件:

  • visibility_of_element_located:等待元素可见
  • element_to_be_clickable:等待元素可点击
  • presence_of_element_located:等待元素出现在 DOM 中。
  • title_contains:等待页面标题包含特定文本
  • 等等。

完整示例:

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

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 创建WebDriverWait实例
wait = WebDriverWait(driver, 10)

# 等待直到元素可见
element = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@id='example']")))

# 执行其他操作
if element:
    print("Element is visible.")

# 关闭浏览器
driver.quit()

通过以上方法,你可以在执行 Selenium 操作时使用 WebDriverWait 来等待特定条件满足,以确保你的脚本能够准确地与网页交互。

Python工作流程庞大且复杂。如果您熟练掌握,还有更多的内容需要学习。

值得庆幸的是,您来对地方了!

我们提供由前百度资深大数据工程师主持的自定进度课程”Python零基础到全栈视频课程”您将通过大量的实践练习来学习Python入门、网络爬虫、数据分析、机器学习等内容。


想要掌握编程的魔力吗?想要轻松驾驭技术的力量吗?别再犹豫了!现在就加入我们的Python课程,开启你的编程之旅吧!


如果您想了解培训如何进行,可以访问码易编程的官网:https://mayibiancheng.net/ 

有任何问题可以想咨询蚂蚁老师 ant_learn_python 微信账号。

点击下方“阅读全文”,可以直达课程主页

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/167299