ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

二-python+selenium抓取网页新闻列表元素,保存到excel文档中

2021-09-22 16:58:58  阅读:210  来源: 互联网

标签:python selenium self excel rowlen xwzx driver row


对于python+selenium抓取网页新闻列表元素,保存到excel文档中_huan_128的专栏-CSDN博客

进行的优化

注意:本人出于学习,自己所瞎写,如注重写编码规则者,请忽略

 

 

 

#!/usr/local/bin/python3
# !python3.9
# -*- coding: UTF-8 -*-
'''
@File:xwzx1.py
@Time:2021-09-09 18:32
@Author:
抓取网页新闻列表元素,并记录标题和链接地址,保存到excel文档中
'''
from selenium import webdriver
from os.path import join
import os
import sys
from time import strftime
from time import sleep
import xlrd
import xlwt

excel_dir=os.path.dirname(os.path.abspath(__file__))
chromdriver=join(os.path.split(excel_dir)[0],'drivers','chromedriver')
now_time=strftime("%Y-%m-%d-%H-%M")

class text_xwzx():
    def __init__(self):

        self.url="http://www.sinopecgroup.com/group/xwzx/"
        self.filename=now_time+".xls"
        self.path=join(excel_dir,'data/')
    #获取新闻列表的标题和链接,同时写入excel中
    def getUTitle(self,driver,excel,row=0,col=0,rowlen=0):

        # 先找到ul->li,再找li->span.title->a,根据标签<a>属性,得到title和url
        ul = driver.find_element_by_css_selector("ul.w_newslistpage_list")
        atitles = ul.find_elements_by_css_selector("li>span.title>a")

        for title in atitles:
            atitle = title.text
            aurl = title.get_attribute("href")
            #当有分页时,先取得第一页的列表数量,作为第二页的开始,依次小于当前页列表的总数量
            #思路:1)当为首页时,row从0到列表总数;若为第二/三/四页时,把首页列表总数量,做为开始数,遍历当前页列表的总数;

            # 写入excel
            # 参数对应 row-行, col-列, 值
            excel.write(row, col, atitle)
            excel.write(row, col + 1, aurl)
            if(rowlen >= len(atitles)):
                row += 1
            else:
                row += 1
        return row


    #根据分页统计存放excel里的数据,以行数为基准
    #modular:新闻模块;sh:excel模块方法;indexnum:查看多少页数据;rowlen:excel表中row的指定行数;
    def nextPage(self,driver,modular,sh,xwzx,indexnum,rowlen):
        '''
        根据分页属性,进行分页抓取数据
        分页特点为default_XXX.shtml,default.shtml为首页
        先抓取,总分页数;
        '''
        pagingIndex=driver.find_element_by_css_selector('#pagingIndex>span>b').text
        index = str(pagingIndex).split("/")[1]
        num=(int(index))
        a=0
        while a < indexnum:
            if(num == (int(index))):
                nurl=self.url + modular + '/default.shtml'
            else:
                nurl =self.url + modular + '/default'+'_'+str(num)+'.shtml'
            print(nurl)
            driver.get(nurl)
            sleep(10)

            if(rowlen == 0):
                rowlen = xwzx.getUTitle(driver, sh)
            elif(rowlen >= 40):
                rowlen = xwzx.getUTitle(driver, sh,rowlen,0,rowlen)
            else:
                print("rowlen既不小于0又不大于40,等于为",rowlen)

            a +=1
            num = num-1

    #读取新闻列表数据
    #modular:新闻模块;indexnum:查看多少页数据;rowlen:excel表中row的指定行数;
    def getData(self,modular,indexnum,rowlen=0):
        driver = webdriver.Chrome(chromdriver)
        driver.get(self.url+modular+'/default.shtml')
        sleep(10)
        # 使用xlwt模块操作Excel的方法
        book = xlwt.Workbook(encoding='utf-8')
        # 先创建一个worksheet
        sh = book.add_sheet(modular)
        xwzx = text_xwzx()
        xwzx.nextPage(driver,modular,sh,xwzx,indexnum,rowlen)
        path_xls = self.path+self.filename
        # print(path_xls)
        #保存文件,文件给文件一个名字
        book.save(path_xls)

if __name__ == '__main__':
    data=text_xwzx()
    data.getData('dqgz',5)

标签:python,selenium,self,excel,rowlen,xwzx,driver,row
来源: https://blog.csdn.net/huan_128/article/details/120418161

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有