IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 隔行如隔山,几行代码教你简单爬取天天基金网基金排行 -> 正文阅读

[Python知识库]隔行如隔山,几行代码教你简单爬取天天基金网基金排行

ready?
学习永无止境,秃头警告!
随着从入门到入狱,静态网页已经满足不了哥的需求,自己太作死了!
所以,决定用selenium获取所有页数,经历过一天的偷摸爬滚终究成就以下源码!

步骤:

  • 分析静态网页
  • 找出’下一页‘的按钮,通过selenium模拟点击
  • 保存为csv文件

首先,以以下网页为例
http://fundf10.eastmoney.com/jjjz_005669.html
在这里插入图片描述
接着,右键点击检查进入开发者模式,开始对网页进行分析。
在这里插入图片描述
一页有20行数据,放在tbody标签中,只需遍历提取每一个tr标签即可
CSS_SELECTOR路径如下:

'#jztable > table > tbody > tr'

紧接着,分析每一条tr标签的数据
在这里插入图片描述
提取比较简单,

found_list['净值日期'] = item.find('td:nth-child(1)').text()
found_list['单位净值'] = item.find('td:nth-child(2)').text()
found_list['累计净值'] = item.find('td:nth-child(3)').text()
found_list['日增长率'] = item.find('td:nth-child(4)').text()

分析完静态网页后,要让浏览器模拟点击下一页,通过选择元素定位其路径

'#pagebar > div.pagebtns > label:nth-child(8)'

注意:

'#pagebar > div.pagebtns > label:nth-child(9)'

到第31页后,路径会变化,代码会报错,加入except selenium.common.exceptions.NoSuchElementException语句可接着遍历下面的页数

注意,页面显示41页,但其路径在每一页其路径会发生变化,所以建议在第一页就开始定位,由于最后一页并没有以下圈住的标签,所以总的页数total_page_num+3才能遍历到41页。
在这里插入图片描述
这个小小的插曲玩弄了我一整天,强迫症的我不能放弃每一页。
小伙伴,你是否坚持看到了这里,接下来便是源码时间。
show time!

import time
import selenium.common.exceptions
import csv ,codecs
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from pyquery import PyQuery as pq

url='http://fundf10.eastmoney.com/jjjz_005669.html'
#browser = webdriver.Edge("C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe")
browser=webdriver.Chrome()
wait = WebDriverWait(browser, 10)

def get_url():
    browser.get(url)
    #获取页数
    total_page_str = wait.until(
        EC.presence_of_element_located(
            (By.CSS_SELECTOR, '#pagebar > div.pagebtns > label:nth-child(8)'))).text
    total_page_num = int(re.search("(\d+)", total_page_str).group(1))
    try:
        for j in range(1,total_page_num+3):


            html = browser.page_source
            doc = pq(html)
            items = list(doc('#jztable > table > tbody > tr').items())
            for item in items:
                found_list = {}
                found_list['净值日期'] = item.find('td:nth-child(1)').text()
                found_list['单位净值'] = item.find('td:nth-child(2)').text()
                found_list['累计净值'] = item.find('td:nth-child(3)').text()
                found_list['日增长率'] = item.find('td:nth-child(4)').text()
                yield found_list

            btn = browser.find_element_by_css_selector('#pagebar > div.pagebtns > label:nth-child(9)')
            browser.execute_script('arguments[0].click();', btn)  # 点击下一页
            # btn.click()
            time.sleep(2)
    except selenium.common.exceptions.NoSuchElementException:
        html = browser.page_source
        doc = pq(html)
        items = list(doc('#jztable > table > tbody > tr').items())
        for item in items:
            found_list = {}
            found_list['净值日期'] = item.find('td:nth-child(1)').text()
            found_list['单位净值'] = item.find('td:nth-child(2)').text()
            found_list['累计净值'] = item.find('td:nth-child(3)').text()
            found_list['日增长率'] = item.find('td:nth-child(4)').text()
            yield found_list

        btn = browser.find_element_by_css_selector('#pagebar > div.pagebtns > label:nth-child(7)')
        browser.execute_script('arguments[0].click();', btn)  # 点击下一页
        # btn.click()
        time.sleep(2)

if __name__=='__main__':
    f=codecs.open('天天基金网.csv','w+',encoding='utf-8-sig')
    filename=['净值日期','单位净值','累计净值','日增长率']
    writer=csv.DictWriter(f,fieldnames=filename)
    writer.writeheader()
    for i in get_url():
        print(i)
        writer.writerow(i)

效果图:
在这里插入图片描述
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:42:01  更:2021-08-16 11:42:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:35:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码