一个小妹要的,忙活了半天,很久没写了果然退步了,还是个人太菜,太渣了!

很久没有写Python爬虫了,有多久呢?一个礼拜,半个月还是一个月,太久了,导致手感稀疏,连很多库的用法都快忘得一干二净了,果然学习如逆水行舟,不进则退!

目标网站:

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_bc

爬取目标:

页面上2024年中国500强排行榜所有数据

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_数据_02

存在问题:

页面数据显示不完整,数据的获取存在隐藏展示

打开APP查看完整关键数据

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_开发语言_03

解决思路:

其实数据是通过js点击加载,隐藏的关键数据可以通过js获取到,关键就是数据获取及整理加工

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_python_04

分享几个关键的地方:

1.写入csv文件

#写入csv文件
def write_scv(name,data):
    opencsv=open(f'{name}.csv','a+')
    print(">> 关键词数据正在写入csv..")
    for i in data:
        print (i)
        opencsv.write('%s\n'%i)
    print(">> 关键词数据写入csv成功!")

2.写入excel格式文件

#保存数据为excel格式
def bcsj(name,data):
    workbook = xlwt.Workbook(encoding='utf-8')
    booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)
    title = [['排名', '公司名称', '公司介绍', '营收(百万美元)']]
    title.extend(data)
    #print(title)
    for i, row in enumerate(title):
        for j, col in enumerate(row):
            booksheet.write(i, j, col)
    workbook.save(f'{name}.xls')
    print(f"保存关键词数据为 {name}.xls 成功!")

3.关键数据的获取

初始,以为是一个json数据格式,经过反复调试发现获取不到,故采用最笨的方法直接用正则获取网页关键数据

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_爬虫_05

附完整源码供参考:

#500强数据获取
#http://www.caifuzhongwen.com/fortune500/paiming/china500/2024_%e4%b8%ad%e5%9b%bd500%e5%bc%ba.htm
# -*- coding: UTF-8 -*-
#Author@公众号:云搞机@微信:huguo00289


import requests
import re
import xlwt
from lxml import etree


#写入csv文件
def write_scv(name,data):
    opencsv=open(f'{name}.csv','a+')
    print(">> 关键词数据正在写入csv..")
    for i in data:
        print (i)
        opencsv.write('%s\n'%i)
    print(">> 关键词数据写入csv成功!")




#保存数据为excel格式
def bcsj(name,data):
    workbook = xlwt.Workbook(encoding='utf-8')
    booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)
    title = [['排名', '公司名称', '公司介绍', '营收(百万美元)']]
    title.extend(data)
    #print(title)
    for i, row in enumerate(title):
        for j, col in enumerate(row):
            booksheet.write(i, j, col)
    workbook.save(f'{name}.xls')
    print(f"保存关键词数据为 {name}.xls 成功!")


def bfbcsj(name,data):
    workbook = xlwt.Workbook(encoding='utf-8')
    booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)
    title = [['百万美元', '年增减%']]
    title.extend(data)
    #print(title)
    for i, row in enumerate(title):
        for j, col in enumerate(row):
            booksheet.write(i, j, col)
    workbook.save(f'{name}.xls')
    print(f"保存关键词数据为 {name}.xls 成功!")


def get_data():
    headers={
        'cookie':'acw_tc=2ff616a117325876497522346efe9740f02a9d76bf99071a9a72c8ca9b; cdn_sec_tc=2ff616a117325876497522346efe9740f02a9d76bf99071a9a72c8ca9b',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
    }
    url="http://www.caifuzhongwen.com/fortune500/paiming/china500/2024_%e4%b8%ad%e5%9b%bd500%e5%bc%ba.htm"
    response=requests.get(url=url,headers=headers,timeout=6)
    print(response.status_code)
    html=response.content.decode('utf-8')
    print(html)
    tree=etree.HTML(html)


    ranks=tree.xpath('//tbody/tr/td/i[@class="rank"]/text()')
    print(ranks)
    companys=tree.xpath('//tbody/tr/td/a/text()')
    print(companys)
    hides=tree.xpath('//tbody/tr/td/span[@class="hide"]/text()')
    print(hides)
    rights=tree.xpath('//tbody/tr/td[@align="right"]/text()')
    print(rights)


    cdatas=[]
    for rank,company,hide,right in zip(ranks,companys,hides,rights):
        cdata=rank,company,hide,right
        print(cdata)
        cdatas.append(cdata)


    name="中国500强企业"
    bcsj(name,cdatas)


    companyDetails=re.findall(r'var companyDetails =(.+?)// xyh 循环函数',html,re.S)[0]
    companyDetails=companyDetails.replace('\n                        "]','')
    print(companyDetails)
    #营业收入
    item1=re.findall(r"item1: '营业收入',item2: '(.+?)',item3: '(.+?)'",companyDetails,re.S)
    print(item1)
    print(len(item1))
    bfbcsj("营业收入",item1)
    #利润
    item2=re.findall(r"item1: '利润',item2: '(.+?)',item3: '(.+?)'",companyDetails,re.S)
    print(item2)
    print(len(item2))
    bfbcsj("利润",item2)
    #资产
    item3=re.findall(r"item1: '资产',item2: '(.+?)',item3: ''",companyDetails,re.S)
    print(item3)
    print(len(item3))
    write_scv("资产",item3)
    #股东权益
    item4=re.findall(r"item1: '股东权益',item2: '(.+?)',item3: ''",companyDetails,re.S)
    print(item4)
    print(len(item4))
    write_scv("股东权益",item4)
    #净利率
    item5=re.findall(r"item1: '净利率',item2: '(.+?)',item3: ''",companyDetails,re.S)
    print(item5)
    print(len(item5))
    write_scv("净利率",item5)
    #资产收益率
    item6=re.findall(r"item1: '资产收益率',item2: '(.+?)',item3: ''",companyDetails,re.S)
    print(item6)
    print(len(item6))
    write_scv("资产收益率",item6)




def main():
    get_data()


if __name__ == '__main__':
    main()


·················END·················

你好,我是二大爷,

革命老区外出进城务工人员,

互联网非早期非专业站长,

喜好python,写作,阅读,英语

不入流程序,自媒体,seo . . .

公众号不挣钱,交个网友。

关注关注二大爷呗~给你分享python,写作,阅读的内容噢~

扫一扫下方二维码即可关注我噢~

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_bc_06

【Python爬虫】2024年中国500强排行榜数据爬取附Pyhton源码_开发语言_07

关注我的都变秃了

说错了,都变强了!

不信你试试

扫码关注最新动态

公众号ID:eryeji