一、爬取目标
二、完整源码
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# Copyright (c) 2024 愤怒的it男, All Rights Reserved.
# FileName : code.py
# Date : 2024.01.13
# Author : 愤怒的it男
# Version : 1.0.0
# Node : 欢迎关注微信公众号【愤怒的it男】
#
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
import csv
import requests
import pandas as pd
import json
import jsonpath
from lxml import etree
from datetime import datetime, timedelta
from prettytable import PrettyTable
def getRecordData(recordUrl, headers):
response = requests.get(url=recordUrl, headers=headers)
html = etree.HTML(response.text)
item1List = html.xpath("//p[@class='analysis-list-item']/span[@class='item1']/text()")
item2List = html.xpath("//p[@class='analysis-list-item']/span[@class='item2']/text()")
item3List = html.xpath("//p[@class='analysis-list-item']/span[@class='item3']/text()")
item4List = html.xpath("//p[@class='analysis-list-item']/span[@class='item4']/text()")
item5List = html.xpath("//p[@class='analysis-list-item']/span[@class='item5']/text()")
if(item1List==[]):
return 0, ''
df = pd.DataFrame([item1List, item2List, item3List, item4List, item5List]).T
df[5] = df[0] + ' ' + df[1] + ' ' + df[2] + ' ' +df[3] + ' ' + df[4]
recordNum = df[5].index.size
recordData = df[5].str.cat(sep='\n')
return recordNum, recordData
def getCourseData(courseUrl, headers):
response = requests.get(url=courseUrl, headers=headers)
dataList = json.loads(response.text)
matchIdList = jsonpath.jsonpath(dataList, "$.content.matches..match_id")
dateUtcList = jsonpath.jsonpath(dataList, "$.content.matches..date_utc")
timeUtcList = jsonpath.jsonpath(dataList, "$.content.matches..time_utc")
teamANameList = jsonpath.jsonpath(dataList, "$.content.matches..team_A_name")
teamBNameList = jsonpath.jsonpath(dataList, "$.content.matches..team_B_name")
recordNumList = []
recordDataList = []
for matchId in matchIdList:
recordUrl = 'https://www.dongqiudi.com/liveDetail/{}'.format(matchId)
recordNum, recordData = getRecordData(recordUrl, headers)
recordNumList.append(recordNum)
recordDataList.append(recordData)
courseData = pd.DataFrame([dateUtcList, timeUtcList, teamANameList, teamBNameList, recordNumList, recordDataList]).T
return courseData
def checkData(courseData):
def checkDate(row):
dateTime = datetime.strptime(row, "%Y-%m-%d %H:%M:%S") + timedelta(hours=8)
date = dateTime.date()
return date
def checkTime(row):
dateTime = datetime.strptime(row, "%Y-%m-%d %H:%M:%S") + timedelta(hours=8)
time = dateTime.time()
return time
courseData[0] = courseData[0]+' '+courseData[1]
courseData[1] = courseData[0]
courseData[0] = courseData[0].apply(checkDate)
courseData[1] = courseData[1].apply(checkTime)
courseData = courseData.values.tolist()
return courseData
def printData(result):
table = PrettyTable()
table.field_names = ["比赛日期", "比赛时间", "主队", "客队", "交战次数", "交战往绩"]
table.add_rows(result)
print(table)
def saveData(result):
with open('亚洲杯.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(result)
def main():
result = []
baseUrl = 'https://www.dongqiudi.com/sport-data/soccer/biz/data/schedule?season_id=14593&round_id=69985&gameweek={}&app=dqd&platform=web&version=0'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
for page in range(1,4):
courseUrl = baseUrl.format(page)
courseData = getCourseData(courseUrl, headers)
data = checkData(courseData)
result = result + data
printData(result)
saveData(result)
if __name__== "__main__" :
main()
三、爬取结果
+------------+----------+--------------+--------------+----------+-----------------------------------------------+
| 比赛日期 | 比赛时间 | 主队 | 客队 | 交战次数 | 交战往绩 |
+------------+----------+--------------+--------------+----------+-----------------------------------------------+
| 2024-01-17 | 01:30:00 | 沙特阿拉伯 | 阿曼 | 10 | 2023-01-12 海湾杯 沙特阿拉伯 1-2 阿曼 |
| | | | | | 2022-01-28 亚洲预选 沙特阿拉伯 1-0 阿曼 |
| | | | | | 2021-09-08 亚洲预选 阿曼 0-1 沙特阿拉伯 |
| | | | | | 2019-12-03 海湾杯 阿曼 1-3 沙特阿拉伯 |
| | | | | | 2017-12-28 海湾杯 沙特阿拉伯 0-2 阿曼 |
| | | | | | 2011-11-16 亚洲预选 沙特阿拉伯 0-0 阿曼 |
| | | | | | 2011-09-02 亚洲预选 阿曼 0-0 沙特阿拉伯 |
| | | | | | 2009-08-13 友谊赛 阿曼 2-1 沙特阿拉伯 |
| | | | | | 2009-01-17 海湾杯 阿曼 0-0 沙特阿拉伯 |
| | | | | | 2007-07-01 友谊赛 阿曼 1-1 沙特阿拉伯 |
| 2024-01-16 | 22:30:00 | 泰国 | 吉尔吉斯斯坦 | 1 | 2006-12-02 亚运男足 吉尔吉斯斯坦 0-2 泰国 |
| 2024-01-16 | 01:30:00 | 马来西亚 | 约旦 | 3 | 2021-10-06 友谊赛 约旦 4-0 马来西亚 |
| | | | | | 2019-08-30 友谊赛 马来西亚 0-1 约旦 |
| | | | | | 2009-09-05 友谊赛 约旦 0-0 马来西亚 |
| 2024-01-15 | 22:30:00 | 印度尼西亚 | 伊拉克 | 4 | 2023-11-16 亚洲预选 伊拉克 5-1 印度尼西亚 |
| | | | | | 2013-11-19 亚资赛 印度尼西亚 0-2 伊拉克 |
| | | | | | 2013-02-06 亚资赛 伊拉克 1-0 印度尼西亚 |
| | | | | | 2006-11-18 亚运男足 印度尼西亚 0-6 伊拉克 |
| 2024-01-15 | 19:30:00 | 韩国 | 巴林 | 5 | 2019-01-22 亚洲杯 韩国 1-1 巴林 |
| | | | | | 2011-01-11 亚洲杯 韩国 2-1 巴林 |
| | | | | | 2009-02-04 友谊赛 巴林 2-2 韩国 |
| | | | | | 2007-07-15 亚洲杯 巴林 2-1 韩国 |
| | | | | | 2006-12-05 亚运男足 韩国 1-0 巴林 |
| 2024-01-15 | 01:30:00 | 伊朗 | 巴勒斯坦 | 3 | 2018-12-24 友谊赛 巴勒斯坦 1-1 伊朗 |
| | | | | | 2011-10-06 友谊赛 伊朗 7-0 巴勒斯坦 |
| | | | | | 2007-06-20 友谊赛 伊朗 2-0 巴勒斯坦 |
| 2024-01-14 | 22:30:00 | 阿联酋 | 中国香港 | 2 | 2013-11-15 亚资赛 阿联酋 4-0 中国香港 |
| | | | | | 2013-10-15 亚资赛 中国香港 0-4 阿联酋 |
| 2024-01-14 | 19:30:00 | 日本 | 越南 | 5 | 2022-03-29 亚洲预选 日本 1-1 越南 |
| | | | | | 2021-11-11 亚洲预选 越南 0-1 日本 |
| | | | | | 2019-01-24 亚洲杯 越南 0-1 日本 |
| | | | | | 2011-10-07 友谊赛 日本 1-0 越南 |
| | | | | | 2007-07-16 亚洲杯 越南 1-4 日本 |
| 2024-01-14 | 01:30:00 | 乌兹别克斯坦 | 叙利亚 | 5 | 2020-11-13 友谊赛 乌兹别克斯坦 0-1 叙利亚 |
| | | | | | 2019-06-11 友谊赛 乌兹别克斯坦 2-0 叙利亚 |
| | | | | | 2018-09-06 友谊赛 乌兹别克斯坦 1-1 叙利亚 |
| | | | | | 2017-03-23 亚洲预选 叙利亚 1-0 乌兹别克斯坦 |
| | | | | | 2016-09-01 亚洲预选 乌兹别克斯坦 1-0 叙利亚 |
| 2024-01-13 | 22:30:00 | 中国 | 塔吉克斯坦 | 1 | 2019-06-11 友谊赛 中国 1-0 塔吉克斯坦 |
| 2024-01-13 | 19:30:00 | 澳大利亚 | 印度 | 1 | 2011-01-10 亚洲杯 印度 0-4 澳大利亚 |
| 2024-01-13 | 00:00:00 | 卡塔尔 | 黎巴嫩 | 0 | |
| 2024-01-22 | 01:30:00 | 吉尔吉斯斯坦 | 沙特阿拉伯 | 0 | |
| 2024-01-21 | 22:30:00 | 阿曼 | 泰国 | 8 | 2021-05-25 友谊赛 泰国 0-1 阿曼 |
| | | | | | 2019-01-02 友谊赛 泰国 0-2 阿曼 |
| | | | | | 2012-02-29 亚洲预选 阿曼 2-0 泰国 |
| | | | | | 2011-09-06 亚洲预选 泰国 3-0 阿曼 |
| | | | | | 2008-06-22 亚洲预选 阿曼 2-1 泰国 |
| | | | | | 2008-03-26 亚洲预选 泰国 0-1 阿曼 |
| | | | | | 2007-07-12 亚洲杯 阿曼 0-2 泰国 |
| | | | | | 2004-07-28 亚洲杯 阿曼 2-0 泰国 |
| 2024-01-20 | 22:30:00 | 巴林 | 马来西亚 | 8 | 2022-06-11 亚洲杯 马来西亚 1-2 巴林 |
| | | | | | 2021-05-29 友谊赛 巴林 2-0 马来西亚 |
| | | | | | 2013-11-15 亚资赛 巴林 1-0 马来西亚 |
| | | | | | 2013-10-15 亚资赛 马来西亚 1-1 巴林 |
| | | | | | 2007-10-28 亚洲预选 马来西亚 0-0 巴林 |
| | | | | | 2007-10-21 亚洲预选 巴林 4-1 马来西亚 |
| | | | | | 2003-10-22 亚资赛 巴林 3-1 马来西亚 |
| | | | | | 2003-10-12 亚资赛 马来西亚 2-2 巴林 |
| 2024-01-20 | 19:30:00 | 约旦 | 韩国 | 5 | 2014-11-14 友谊赛 约旦 0-1 韩国 |
| | | | | | 2008-09-05 友谊赛 韩国 1-0 约旦 |
| | | | | | 2008-06-07 亚洲预选 约旦 0-1 韩国 |
| | | | | | 2008-05-31 亚洲预选 韩国 2-2 约旦 |
| | | | | | 2004-07-19 亚洲杯 韩国 0-0 约旦 |
| 2024-01-20 | 01:30:00 | 中国香港 | 伊朗 | 4 | 2023-11-16 亚洲预选 伊朗 4-0 中国香港 |
| | | | | | 2021-06-03 亚洲预选 伊朗 3-1 中国香港 |
| | | | | | 2019-09-10 亚洲预选 中国香港 0-2 伊朗 |
| | | | | | 2006-12-03 亚运男足 中国香港 1-2 伊朗 |
| 2024-01-19 | 22:30:00 | 越南 | 印度尼西亚 | 13 | 2023-01-09 东南锦 越南 2-0 印度尼西亚 |
| | | | | | 2023-01-06 东南锦 印度尼西亚 0-0 越南 |
| | | | | | 2021-12-15 东南锦 印度尼西亚 0-0 越南 |
| | | | | | 2021-06-08 亚洲预选 越南 4-0 印度尼西亚 |
| | | | | | 2019-10-15 亚洲预选 印度尼西亚 1-3 越南 |
| | | | | | 2016-12-07 东南锦 越南 2-1 印度尼西亚 |
| | | | | | 2016-12-03 东南锦 印度尼西亚 2-1 越南 |
| | | | | | 2016-11-08 友谊赛 越南 3-2 印度尼西亚 |
| | | | | | 2016-10-09 友谊赛 印度尼西亚 2-2 越南 |
| | | | | | 2014-11-22 东南锦 越南 2-2 印度尼西亚 |
| | | | | | 2012-10-16 友谊赛 越南 0-0 印度尼西亚 |
| | | | | | 2012-09-15 友谊赛 印度尼西亚 0-0 越南 |
| | | | | | 2008-01-15 友谊赛 越南 1-1 印度尼西亚 |
| 2024-01-19 | 19:30:00 | 伊拉克 | 日本 | 6 | 2017-06-13 亚洲预选 伊拉克 1-1 日本 |
| | | | | | 2016-10-06 亚洲预选 日本 2-1 伊拉克 |
| | | | | | 2015-06-11 友谊赛 日本 4-0 伊拉克 |
| | | | | | 2015-01-16 亚洲杯 伊拉克 0-1 日本 |
| | | | | | 2013-06-11 亚洲预选 伊拉克 0-1 日本 |
| | | | | | 2012-09-11 亚洲预选 日本 1-0 伊拉克 |
| 2024-01-19 | 01:30:00 | 巴勒斯坦 | 阿联酋 | 4 | 2016-03-24 亚洲预选 阿联酋 2-0 巴勒斯坦 |
| | | | | | 2015-09-08 亚洲预选 巴勒斯坦 0-0 阿联酋 |
| | | | | | 2012-02-24 友谊赛 阿联酋 3-0 巴勒斯坦 |
| | | | | | 2009-10-10 友谊赛 阿联酋 1-1 巴勒斯坦 |
| 2024-01-18 | 22:30:00 | 印度 | 乌兹别克斯坦 | 2 | 2001-06-26 友谊赛 印度 1-2 乌兹别克斯坦 |
| | | | | | 1997-04-04 友谊赛 印度 2-2 乌兹别克斯坦 |
| 2024-01-18 | 19:30:00 | 叙利亚 | 澳大利亚 | 3 | 2019-01-15 亚洲杯 澳大利亚 3-2 叙利亚 |
| | | | | | 2017-10-10 亚洲预选 澳大利亚 1-1 叙利亚 |
| | | | | | 2017-10-05 亚洲预选 叙利亚 1-1 澳大利亚 |
| 2024-01-17 | 22:30:00 | 塔吉克斯坦 | 卡塔尔 | 2 | 2012-09-07 友谊赛 卡塔尔 1-2 塔吉克斯坦 |
| | | | | | 2006-02-14 友谊赛 卡塔尔 2-0 塔吉克斯坦 |
| 2024-01-17 | 19:30:00 | 黎巴嫩 | 中国 | 3 | 2009-11-22 亚资赛 中国 1-0 黎巴嫩 |
| | | | | | 2009-11-14 亚资赛 黎巴嫩 0-2 中国 |
| | | | | | 2008-01-20 友谊赛 中国 0-0 黎巴嫩 |
| 2024-01-25 | 23:00:00 | 吉尔吉斯斯坦 | 阿曼 | 2 | 2023-11-21 亚洲预选 吉尔吉斯斯坦 1-0 阿曼 |
| | | | | | 2023-06-20 中亚杯 吉尔吉斯斯坦 0-1 阿曼 |
| 2024-01-25 | 23:00:00 | 沙特阿拉伯 | 泰国 | 8 | 2017-03-23 亚洲预选 泰国 0-3 沙特阿拉伯 |
| | | | | | 2016-09-02 亚洲预选 沙特阿拉伯 1-0 泰国 |
| | | | | | 2011-11-12 亚洲预选 沙特阿拉伯 3-0 泰国 |
| | | | | | 2011-10-11 亚洲预选 泰国 0-0 沙特阿拉伯 |
| | | | | | 2009-02-05 友谊赛 沙特阿拉伯 2-1 泰国 |
| | | | | | 2008-11-08 友谊赛 沙特阿拉伯 1-0 泰国 |
| | | | | | 2001-10-22 亚洲预选 沙特阿拉伯 4-1 泰国 |
| | | | | | 2001-09-15 亚洲预选 泰国 1-3 沙特阿拉伯 |
| 2024-01-25 | 19:30:00 | 韩国 | 马来西亚 | 0 | |
| 2024-01-25 | 19:30:00 | 约旦 | 巴林 | 12 | 2021-09-08 友谊赛 巴林 1-2 约旦 |
| | | | | | 2021-03-31 友谊赛 巴林 1-2 约旦 |
| | | | | | 2019-08-05 西亚锦 约旦 0-1 巴林 |
| | | | | | 2017-08-30 友谊赛 巴林 0-0 约旦 |
| | | | | | 2016-09-04 友谊赛 巴林 0-0 约旦 |
| | | | | | 2015-01-04 友谊赛 巴林 1-0 约旦 |
| | | | | | 2014-01-05 西亚锦 巴林 0-1 约旦 |
| | | | | | 2012-11-08 友谊赛 巴林 3-0 约旦 |
| | | | | | 2011-12-23 泛阿运会 巴林 1-0 约旦 |
| | | | | | 2010-12-28 友谊赛 约旦 1-2 巴林 |
| | | | | | 2010-09-20 友谊赛 约旦 2-0 巴林 |
| | | | | | 2009-06-04 友谊赛 巴林 4-0 约旦 |
| 2024-01-24 | 19:30:00 | 日本 | 印度尼西亚 | 0 | |
| 2024-01-24 | 19:30:00 | 伊拉克 | 越南 | 5 | 2023-11-21 亚洲预选 越南 0-1 伊拉克 |
| | | | | | 2019-01-08 亚洲杯 伊拉克 3-2 越南 |
| | | | | | 2016-03-29 亚洲预选 伊拉克 1-0 越南 |
| | | | | | 2015-10-08 亚洲预选 越南 1-1 伊拉克 |
| | | | | | 2007-07-21 亚洲杯 伊拉克 2-0 越南 |
| 2024-01-23 | 23:00:00 | 中国香港 | 巴勒斯坦 | 2 | 2001-03-20 亚洲预选 巴勒斯坦 1-0 中国香港 |
| | | | | | 2001-03-04 亚洲预选 中国香港 1-1 巴勒斯坦 |
| 2024-01-23 | 23:00:00 | 伊朗 | 阿联酋 | 11 | 2022-02-01 亚洲预选 伊朗 1-0 阿联酋 |
| | | | | | 2021-10-08 亚洲预选 阿联酋 0-1 伊朗 |
| | | | | | 2015-01-19 亚洲杯 伊朗 1-0 阿联酋 |
| | | | | | 2011-01-20 亚洲杯 阿联酋 0-3 伊朗 |
| | | | | | 2009-06-10 亚洲预选 伊朗 1-0 阿联酋 |
| | | | | | 2008-11-19 亚洲预选 阿联酋 1-1 伊朗 |
| | | | | | 2008-06-08 亚洲预选 阿联酋 0-1 伊朗 |
| | | | | | 2008-06-02 亚洲预选 伊朗 0-0 阿联酋 |
| | | | | | 2007-01-12 友谊赛 阿联酋 0-2 伊朗 |
| | | | | | 2001-10-31 亚洲预选 阿联酋 0-3 伊朗 |
| | | | | | 2001-10-25 亚洲预选 伊朗 1-0 阿联酋 |
| 2024-01-23 | 19:30:00 | 澳大利亚 | 乌兹别克斯坦 | 4 | 2019-01-21 亚洲杯 澳大利亚 0-0 乌兹别克斯坦 |
| | | | | | 2011-01-26 亚洲杯 乌兹别克斯坦 0-6 澳大利亚 |
| | | | | | 2009-04-01 亚洲预选 澳大利亚 2-0 乌兹别克斯坦 |
| | | | | | 2008-09-10 亚洲预选 乌兹别克斯坦 0-1 澳大利亚 |
| 2024-01-23 | 19:30:00 | 叙利亚 | 印度 | 6 | 2019-07-16 友谊赛 印度 1-1 叙利亚 |
| | | | | | 2012-08-22 尼赫鲁杯 印度 2-1 叙利亚 |
| | | | | | 2009-08-31 尼赫鲁杯 印度 0-0 叙利亚 |
| | | | | | 2009-08-29 尼赫鲁杯 印度 0-1 叙利亚 |
| | | | | | 2007-08-29 友谊赛 印度 1-0 叙利亚 |
| | | | | | 2007-08-23 友谊赛 印度 2-3 叙利亚 |
| 2024-01-22 | 23:00:00 | 卡塔尔 | 中国 | 11 | 2018-09-08 友谊赛 卡塔尔 1-0 中国 |
| | | | | | 2017-09-05 亚洲预选 卡塔尔 1-2 中国 |
| | | | | | 2016-11-15 亚洲预选 中国 0-0 卡塔尔 |
| | | | | | 2016-03-29 亚洲预选 中国 2-0 卡塔尔 |
| | | | | | 2015-10-08 亚洲预选 卡塔尔 1-0 中国 |
| | | | | | 2011-01-13 亚洲杯 中国 0-2 卡塔尔 |
| | | | | | 2008-06-07 亚洲预选 中国 0-1 卡塔尔 |
| | | | | | 2008-06-03 亚洲预选 卡塔尔 0-0 中国 |
| | | | | | 2004-07-25 亚洲杯 中国 1-0 卡塔尔 |
| | | | | | 2001-10-13 亚洲预选 中国 3-0 卡塔尔 |
| | | | | | 2001-09-08 亚洲预选 卡塔尔 1-1 中国 |
| 2024-01-22 | 23:00:00 | 塔吉克斯坦 | 黎巴嫩 | 0 | |
+------------+----------+--------------+--------------+----------+-----------------------------------------------+
四、免责声明
本公众号所有源码均为个人学习所编写,仅可用于计算机技术学习及研究等合法行为,禁止利用本公众号的源码从事任何违反本国(地区)法律法规的业务,如有发现存在违法违规行为我会举报到网监部门。
欢迎关注公众号【愤怒的it男】,超多Python爬虫实例源码。