爬虫数据表格
admin
2023-07-07 18:23:42
0

这是一篇关于iaaf国际运动员跳远数据表格的爬虫经验 。(今天我们只取progression项的long=jump的数据)
我个人是分了四个脚本进行运行:
首先第一个脚本。1:我们需要导入三个python的第三方库,分别是requests( 用于简洁且简单的处理HTTP请求的第三方库),beautifulsoup4( 从HTML和XML文件中解析出数据的第三方库),import json(JSON 是轻量级的文本数据交换格式。是用来存储和交换文本信息的语法。)
这里我加了一个:from future import print_function(表示不同python版本运行时不会出现问题)
2:这里我们还需要取一个‘User_Agent’:方法:打开主界面检查元素,在控制台最下方输入“alert(navigator.user.Agent)”这时会弹出一个小窗口,复制即可。(作用:用于洋装成浏览器而不是爬虫)
('User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15', })

3:url = 'https://www.iaaf.org/records/toplists/jumps/long-jump/outdoor/men/senior/2018?regionType=world&windReading=regular&page={}&bestResultsOnly=true'

这时我们可以利用requests,BeautiflSoup来进行处理。
db = pymongo.MongoClient().iaaf(调用数据库)
4:res = requests.get(url.format(i), headers=headers)(请求得到数据并勤变量名为res)
5:record_table = soup.findall('table', class='records-table')(定位目标) for i in tr_l: # 针对每一个tr 也就是一行
td_l = i.find_all('td') # td的列表 第三项是 带href
(把td_l里面的每一项赋值 ,组成json数据 {} 插入到mongo(在从mongo里去到herf访问生涯数据并存回这个表)
6: j_data = {}(将数据存到字典里如下:)
try:
j_data['Rank'] = td_l[0].get_text().strip()
j_data['Mark'] = td_l[1].get_text().strip()
j_data['WIND'] = td_l[2].get_text().strip()
j_data['Competitior'] = td_l[3].get_text().strip()
j_data['DOB'] = td_l[4].get_text().strip()
j_data['Nat'] = td_l[5].get_text().strip()
j_data['Pos'] = td_l[6].get_text().strip()
j_data['Venue'] = td_l[8].get_text().strip()
j_data['Date'] = td_l[9].get_text().strip()

            j_data['href'] = td_l[3].find('a')['href']
        except:
            pass
        db.athletes.×××ert_one(j_data)

  if __name__ == '__main__':
       spider_iaaf()(数据库)

下面是第二个脚本:
from future import print_function
import requests
from bs4 import BeautifulSoup(同样引用)
1:headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15'}
2: res = requests.get(url, headers=headers)
html = res.text
3: soup = bs(html,'html.parser')(处理文件)
div = soup.find('div', id='progression')(定位到准确文件)
4:此时如果我们想准确的定位到跳远成绩我➕了一句if语句(if "Long Jump" in text and "View Graph" in text:
tbody = i.parent.parent.table.tbody)表明再此界面有Long Jump和View Graph的就是我们所需要的数据并且返回到上两级取到tbody标签。
tbody_l.append(tbody) #并且追加到tbody。 # 拿到两个元素的tbody 一个为室外 一个室内 用try except,这时我们将两个数据存到字典里。最后 return indoor outdoor。
if name == 'main':
long_jump(url=)

    接下来是第三个脚本:
from __future__ import print_function

import pymongo(PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成.)
import requests
from bs4 import BeautifulSoup
import json(JSON 是轻量级的文本数据交换格式。是用来存储和交换文本信息的语法。))
from long_jump (脚本名)import *(引用第二个脚本)
1:db = pymongo.MongoClient().iaaf()
2:headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15’}(同上理)
3:def get_href():
href_list = db.athletes.find()
Count = 1(负责去mongo中取href 然后访问得到的数据存到原来的表中)
4: for i in href_list:( 取id 根据id把爬来的生涯数据插回去)
print(count)
5: db.athletes.update({'_id':i.get('_id')},{"$set"{"outdoor":outdoor,"indoor":indoor}})
count += 1(获得具体数据)
6:if name == 'main':
get_href()

                第四个脚本:
                from __future__ import print_function
      import xlwt(Python语言中,写入Excel文件的扩展工具。

相应的有xlrd扩展包,专门用于excel读取。)
import pymongo
1:def write_into_xls(cursor):
title =
['Rank','Mark','age','Competitior','DOB','Nat','country','Venue','Date','out_year','out_performance','out_wind','out_place','out_date','in_year','in_performance','in_place','in_date']

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('iaaf',cell_overwrite_ok=True)

2:
flag = 1
db = pymongo.MongoClient().iaaf
for i in country_l:
cursor = db.athletes.find({'Nat':i})
for i in cursor:
print(i)
count_out = len(i['outdoor'])
count_in = len(i['indoor'])
count = 1
if count_out >= count_in:
count = count_out
else:
count = count_in
if count == 0:
count = 1(count 为这条数据占的行数)
3: flag = flag + count

book.save(r'iaaf.xls')(开始从第一行输入数据并且从数据库取)

if name == 'main':
write_into_xls(cursor=None)(生成文件iaaf.xls这时便可用Ecxel查看数据)
***顺便记录一下查看如何查看数据库的内容两种方法:
1: ./mongo show dbs
数据库 : iaaf
use iaaf
show tables ---- athletes

    db.athletes.find()   

2: pymongo db = pymongo.MongoClient().iaaf
for i in db.athletes.find():
print i

相关内容

热门资讯

我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...
原创 识... 还是那句话,机圈苦大屏久已…… 虽然大屏有大屏的美,但是小屏也有小屏的俏。在大屏旗舰占据主流的手机市...
玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...