一个小妹要的,忙活了半天,很久没写了果然退步了,还是个人太菜,太渣了!
很久没有写Python爬虫了,有多久呢?一个礼拜,半个月还是一个月,太久了,导致手感稀疏,连很多库的用法都快忘得一干二净了,果然学习如逆水行舟,不进则退!
目标网站:
爬取目标:
页面上2024年中国500强排行榜所有数据
存在问题:
页面数据显示不完整,数据的获取存在隐藏展示
打开APP查看完整关键数据
解决思路:
其实数据是通过js点击加载,隐藏的关键数据可以通过js获取到,关键就是数据获取及整理加工
分享几个关键的地方:
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数据格式,经过反复调试发现获取不到,故采用最笨的方法直接用正则获取网页关键数据
附完整源码供参考:
#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,写作,阅读的内容噢~
扫一扫下方二维码即可关注我噢~
关注我的都变秃了
说错了,都变强了!
不信你试试
扫码关注最新动态
公众号ID:eryeji