python使用selenium模拟浏览器爬取动态网页的小说

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from selenium.webdriver.support.ui import WebDriverWait
import os,re
from time import sleep

class GetAjaxWeb:
    def __init__(self):
        options = Options()
        options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
        # options.add_argument("headless")

        service=Service(r"D:\Program\Python\edgedriver_win64\msedgedriver.exe")

        self.driver = webdriver.Edge(service=service,options = options)
        self.driver.implicitly_wait(10)

    def getWeb(self,url):
        self.driver.get(url)

    def getHtml(self):
        while not self.driver.find_element(By.CLASS_NAME,'text').text:
            sleep(0.5)
        return self.driver.page_source
        
    def openHtml(self,html,name='out.html'):
        f = open(name, 'w',encoding='utf-8')
        f.write(html)
        # os.startfile(name)
        
    def analysisHtml(self,url,html):
        # 获取小说正文
        chapter=re.search(r'<div class="title">(.*?)<',html).group(1)
        print(f'正在获取 {chapter}')
        content=re.search(r'<div class="text">[\w\W]*?</div>',html).group()
        content=re.sub(r'<p>','\n',content)
        content=re.sub(r' ','',content)
        content=re.sub(r'(<.*?>)|(&.*?;)','',content)
        content=re.sub(r'\n\n',r'\n',content)
        content=re.sub(r'\t',r' ',content)
        text=chapter+'\n'+content+'\n'+url+'\n\n'

        # 获取下一章
        next=self.driver.find_element(By.XPATH,'//*[text()="下一页" or text()="下一章"]')
        if next:
            self.driver.execute_script('arguments[0].click();',next)
            sleep(1)

        return text,url+' '+chapter,self.driver.current_url

    def saveTxt(self,text,url,name='踏星2.txt'):
        f = open(name, 'r+',encoding='utf-8')
        if not url in f.read()[150:]:
            f.write(text)
            return True
        return False

    def getStartUrl(self,name='踏星2.txt'):
        f = open(name, 'r',encoding='utf-8')
        return f.readlines()[-2]

if __name__=='__main__':
    g=GetAjaxWeb()
    nextUrl=g.getStartUrl()
    g.getWeb(nextUrl)
    while nextUrl:
        html=g.getHtml()
        g.openHtml(html)
        text,url,nextUrl=g.analysisHtml(nextUrl,html)
        g.saveTxt(text,url)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用selenium模拟浏览器爬取京东商品评价的代码: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys from time import sleep # 创建一个浏览器对象 browser = webdriver.Chrome() # 访问京东首页 browser.get('https://www.jd.com/') # 查找搜索框并输入要搜索的商品名称 search_box = browser.find_element_by_id('key') search_box.send_keys('手机') search_box.send_keys(Keys.ENTER) # 等待搜索结果页面加载完成 sleep(3) # 找到商品列表中第一个商品的链接并点击进入商品详情页 product_link = browser.find_element_by_css_selector('.gl-item:nth-child(1) .p-name a') product_link.click() # 切换到新打开的标签页 browser.switch_to.window(browser.window_handles[-1]) # 进入商品评价页面 browser.find_element_by_css_selector('#detail .comment-count').click() # 模拟滚动加载评价数据 while True: browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') sleep(3) try: # 找到“查看更多”的按钮并点击 more_button = browser.find_element_by_css_selector('.comment-item .comment-operate .btn-append') more_button.click() sleep(3) except: # 没有“查看更多”按钮,说明评价数据已全部加载完成 break # 找到所有评价的元素 comments = browser.find_elements_by_css_selector('.comment-item') # 遍历所有评价并输出评价内容 for comment in comments: content = comment.find_element_by_css_selector('.comment-con').text.strip() print(content) # 关闭浏览器 browser.quit() ``` 上面的代码中,我们首先使用`selenium`创建一个`Chrome`浏览器对象,并访问京东首页。然后,我们在搜索框中输入要搜索的商品名称,按下`Enter`键进行搜索。搜索结果页面加载完成后,我们找到商品列表中第一个商品的链接,并点击进入商品详情页。切换到新打开的标签页后,我们进入商品评价页面,然后模拟滚动加载评价数据,并在评价数据全部加载完成后,找到所有评价的元素,遍历所有评价并输出评价内容。最后,关闭浏览器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值