# coding = utf-8
# 500强企业爬取 --爬取《财富》网页上的500强企业信息
# writer: Shihan Wong
import requests , bs4
from bs4 import BeautifulSoup
# getHTMLtext函数功能:利用requests模块获得HTML代码 ,形式参数url为网页统一资源定位符
def getHTMLtext(url):
try:
re = requests.get(url ,timeout = 30) # 获取HTNL源码
re.raise_for_status() # 查看状态
re.encoding = re.apparent_encoding # 替换编码
return re.text # 返回HTML文本
except Exception as e: # 如果错误,输出e
print(e)
# saveCompany函数功能:利用BeautifulSoup类解析HTML文本,然后保存解析后的信息
def sveCompany(clist , html): # 形参clist为用户定义用来储存爬取信息的列表,html为之前返回的HTML文本
soup = BeautifulSoup(html , "html.parser") # 解析HTML文本
for tr in soup.find('tbody').children: # 500强信息经查看后发现在'tbody'标签内,遍历其子标签
if isinstance(tr , bs4.element.Tag): # 判断tr是否为标签
tds = tr('td') # 500强信息'tbody'标签的子标签'tr'标签的子标签'td'内,遍历返回子标签列表后保存在变量tds内
clist.append([tds[0].string , tds[2].string , tds[5].string]) # 将爬取的信息保存在设定好的列表内,第一个为排名,二为企业名称,三为国家
# printCompany函数功能:输出保存后的企业信息
def printCompany(clist , num): # 形参clist为之前保存得企业信息,num为用户输入的数字,控制打印的企业数量
print("{0:^10}\t{1:{3}^50}\t{2:{3}^5}".format("排名" , "企业名称" , "国家" , chr(12288))) # 打印输出标题
for i in range(num):
u = clist[i]
print("{0:^10}\t{1:{3}^50}\t{2:{3}^5}".format(u[0] , u[1] , u[2] , chr(12288))) # 打印输出企业信息
def main(): # 定义主函数,调用getHTMLtext(),saveCompany(),printCompany()函数
sinfo = []
url = 'http://www.fortunechina.com/fortune500/c/2019-07/22/content_339535.htm'
html = getHTMLtext(url)
sveCompany(sinfo , html)
printCompany(sinfo , 500)
main()
后面的的国家字段我没有弄好,一直没有给它对其,如果有其他同学知道怎么给它对其看到这文章的话,希望可以在下方告诉我,一同进步。