抓取世界500强公司

正则表达式练手

  1. 获取url&解析
  2. 正则表达式&匹配
  3. 写入表格&保存
import re
from bs4 import BeautifulSoup
import openpyxl
from urllib import request

url='http://www.fortunechina.com/fortune500/c/2018-07/19/content_311046.htm'

req=request.urlopen(url).read()
soup1 =BeautifulSoup(req,'html.parser')
'''
<tbody>
<tr>
<td>1</td> 排名
<td>1</td> 上年排名
<td><a href="../../../../global500/3/2018" target="_blank">沃尔玛(WALMART) </a></td>  名称
<td>500,343</td> 营业收入 (百万美元)
<td>9,862</td> 利润 (百万美元)
<td>美国</td></tr> 国家
'''
#正则表达式
ranking = re.compile(r'<tr>\n<td>(\d*)</td>\n<td>(.*)</td>')  #排名 ,有的企业上年排名缺失,故用通配符
revenue = re.compile(r'''</a></td>\n<td>(.*)</td>\n<td>(.*)</td>''') #营业收入以及利润
enterprise = re.compile(r'blank">(.*) </a></td>') #名称
nation = re.compile(r'<td>(.*)</td></tr>') #国家
soup2 = str(soup1)
mo1 = ranking.findall(soup2) #返回元组列表
mo3 = revenue.findall(soup2) #元组列表
mo2 = enterprise.findall(soup2) #列表
mo4 = nation.findall(soup2) #列表
rank = []
ranked = []
profit = []
netprofit = []
for i in mo1:
    rank.append(i[0])
    ranked.append(i[1])
for i in mo3:
    profit.append(i[0])
    netprofit.append(i[1])
 #创建并写入表格
wb = openpyxl.Workbook()
sheet = wb.active
#插入表头
sheet['a1']='排名'
sheet['b1']='去年排名'
sheet['c1']='名称'
sheet['d1']='营业收入'
sheet['e1']='利润'
sheet['f1']='国家'
#写入数据
for i in range(0,500):
    k = i + 2  #单元格第一格是1,并留出表头
    sheet['A%d'%k] = rank[i]
    sheet['b%d'%k] = ranked[i]
    sheet['c%s'%k] = mo2[i]
    sheet['d%d'%k] = profit[i]
    sheet['e%d'%k] = netprofit[i]
    sheet['f%s'%k] = mo4[i]
#保存
wb.save('500.xlsx')

结果如下图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Severus_20/article/details/88880768