社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

爬取目标

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

例如: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
 
696 次点击