python 爬虫如何爬取动态生成的网页内容

--- 好的方法很多,我们先掌握一种 ---

【背景】

对于网页信息的采集,静态页面我们通常都可以通过python的request.get()库就能获取到整个页面的信息。

但是对于动态生成的网页信息来说,我们通过request.get()是获取不到。

【方法】

可以通过python第三方库selenium来配合实现信息获取,采取方案:python + request + selenium + BeautifulSoup

我们拿纵横中文网的小说采集举例(注意:请查看网站的robots协议找到可以爬取的内容,所谓盗亦有道):

思路整理:

  1.通过selenium 定位元素的方式找到小说章节信息

  2.通过BeautifulSoup加工后提取章节标题和对应的各章节的链接信息

  3.通过request +BeautifulSoup 按章节链接提取小说内容,并将内容存储下来

【上代码】

1.先在开发者工具中,调试定位所需元素对应的xpath命令编写方式

2.通过selenium 中find_elements()定位元素的方式找到所有小说章节,我们这里定义一个方法接受参数来使用

复制代码
def Get_novel_chapters_info(url:str,xpath:str,skip_num=None,chapters_num=None):
    # skip_num 需要跳过的采集章节(默认不跳过),chapters_num需要采集的章节数(默认全部章节)
        # 创建Chrome选项(禁用图形界面)
        chrome_options = Options()
        chrome_options.add_argument("--headless")
        driver = webdriver.Chrome(options=chrome_options)
        driver.get(url)
        driver.maximize_window()
        time.sleep(3)
        # 采集小说的章节元素
        catalogues_list = []
        try:
            catalogues = driver.find_elements(By.XPATH,xpath)
            if skip_num is None:
                for catalogue in catalogues:
                    catalogues_list.append(catalogue.get_attribute('outerHTML'))
                driver.quit()
                if chapters_num is None:
                    return catalogues_list
                else:
                    return catalogues_list[:chapters_num]
            else:
                for catalogue in catalogues[skip_num:]:
                    catalogues_list.append(catalogue.get_attribute('outerHTML'))
                driver.quit()
                if chapters_num is None:
                    return catalogues_list
                else:
                    return catalogues_list[:chapters_num]
        except Exception:
            driver.quit()

3.把采集到的信息通过beautifulsoup加工后,提取章节标题和链接内容

复制代码
        # 获取章节标题和对应的链接信息
        title_link = {}
        for each in catalogues_list:
            bs = BeautifulSoup(each,'html.parser')
            chapter = bs.find('a')
            title = chapter.text
            link = 'https:' + chapter.get('href')
            title_link[title] = link

4.通过request+BeautifulSoup 按章节链接提取小说内容,并保存到一个文件中

复制代码
        # 按章节保存小说内容
        novel_path = '小说存放的路径/小说名称.txt'
        with open(novel_path,'a') as f:
            for title,url in title_link.items():
                response = requests.get(url,headers={'user-agent':'Mozilla/5.0'})
                html = response.content.decode('utf-8')
                soup = BeautifulSoup(html,'html.parser')
                content = soup.find('div',class_='content').text
                # 先写章节标题,再写小说内容
                f.write('---小西瓜免费小说---' + '\n'*2)
                f.write(title + '\n')
                f.write(content+'\n'*3)
复制代码
相关推荐
傻啦嘿哟5 小时前
猫眼电影TOP100爬虫:Requests+正则表达式实战
爬虫·正则表达式
MgArcher6 小时前
抖音a_bogus参数逆向实战:JSVMP环境模拟与Hook技术(2025最新)
javascript·爬虫·python
MgArcher6 小时前
极验GT4滑块验证码全链路逆向:w参数生成与验证流程(2025最新)
爬虫
亿牛云爬虫专家14 小时前
聊聊数据的“冷热分离“:如何对历史爬虫数据进行合理的归档与压缩存储?
爬虫·爬虫代理·架构设计·隧道代理·大数据处理·压缩存储·数据分层存放
袁袁袁袁满14 小时前
Python爬虫实战:利用巨量IP获取跨境电商数据
爬虫·python·网络爬虫·爬虫实战·跨境电商·电商爬虫
拿本唠嗑AI研究15 小时前
现代前端架构爬虫指南:从静态页面到 React/Vue 单页应用
前端·爬虫·架构
一个处女座的程序猿1 天前
Crawler之Tool:MediaCrawler的简介、安装和使用方法、案例应用之详细攻略
爬虫·mediacrawler
深蓝电商API2 天前
Hook Canvas 获取浏览器指纹
爬虫·hook canvas
深蓝电商API2 天前
Hook Crypto API 获取加密参数
爬虫·hook crypto api
IPdodo_2 天前
Python 爬虫网络质量评估实战:成功率、P95 延迟与错误分布怎么测
网络·爬虫·python·网络协议·性能测试