![img]
;
2、col2之后取值也错误;干脆别用了;
方法:如果知道第几轮了,就不用取总数了;
1、https://liansai.500.com/zuqiu-6296/jifen-17831,html解析获取总页数;(这个你是没毛病的)
2、每页数据:用https://liansai.500.com/index.php?c=score&a=getmatch&stid=17831&round=38,得到json格式数据;(回头有验证再说,至少现在没有)
测试:
import openpyxl
import requests
from lxml import etree
def get_page():
r = requests.get('https://liansai.500.com/zuqiu-6296/jifen-17831', timeout=200).text
page_max = etree.HTML(r).xpath('//*[@id="match_group"]/li[last()]/a/text()')
page_total = page_max[0]
return page_total
def get_data(page):
url = 'https://liansai.500.com/index.php?c=score&a=getmatch&stid=17831&round={0}'.format(page)
r = requests.get(url, timeout=200)
return r.json()
def to_excel(file_name, data_list):
wb = openpyxl.Workbook()
for x in data_list:
wb.active.append(x)
wb.save(file_name)
if __name__ == '__main__':
p_num = get_page()
print('总轮{0}'.format(p_num))
page = 38
d = get_data(page)
data = [['轮次', '比赛时间', '主队', '主队分', '客队', '客队分']]
for x in d:
data.append([x['round'], x['stime'], x['hname'], x['gscore'], x['gname'], x['gscore']])
to_excel('d:\\Desktop\\d38.xlsx', data)
print('第{0}轮,{1}'.format(38, len(data)))
你把爬取到的内容先print看下,然后才能知道问题所在
是没有爬取到内容还说写入失败
可能是因为你没有将数据写入excel中。你可以使用openpyxl模块来将数据写入excel中。具体思路如下:
导入openpyxl模块。
创建一个工作簿对象。
选择一个工作表。
将数据写入单元格。
保存工作簿。
下面是示例代码:
import openpyxl
# 创建一个工作簿对象
wb = openpyxl.Workbook()
# 选择一个工作表
ws = wb.active
# 将数据写入单元格
for row in data:
ws.append(row)
# 保存工作簿
wb.save('data.xlsx')
其中,data是你爬取到的数据,可以是一个列表或元组。例如:
data = [
['Name', 'Age', 'Gender'],
['Alice', 25, 'Female'],
['Bob', 30, 'Male'],
['Charlie', 35, 'Male']
]
将数据写入单元格时,可以使用for循环遍历data,然后使用append()方法将每行数据写入工作表。
最后,使用save()方法保存工作簿即可。注意,保存的文件名需要以.xlsx结尾,否则会报错。