爬取网页里表格数据,感觉页面有些复杂,实在爬不出来
import time
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}#爬虫[Requests设置请求头Headers],伪造浏览器
# 核心爬取代码
url= 'https://www.basketball-reference.com/leagues/NBA_2014_games-december.html'
params = {"show_ram":1}
response = requests.get(url,params=params, headers=headers)#访问url
listData=[]#定义数组
soup = BeautifulSoup(response.text, 'html.parser')#获取网页源代码
tr = soup.find('tbody').find_all('tr')
#.find定位到所需数据位置 .find_all查找所有的tr(表格)
# 去除标签栏
for j in tr[1:]: #tr2[1:]遍历第1列到最后一列,表头为第0列
td = j.find_all('th')#td表格
Date = td[0].get_text().strip()
# Start(ET) = td[1].get_text().strip()
# Visitor/Neutral = td[2].get_text().strip()
# Visitor Points = td[3].get_text().strip()
# Home/Neutral = td[4].get_text().strip()
# Home Points = td[5].get_text().strip()
#  =td[6].get_text().strip()
#  p=td[7].get_text().strip()
# Attend.=td[8].get_text().strip()
# Arena=td[9].get_text().strip()
# Notes=td[10].get_text().strip()
# listData.append([Date,Start(ET),Visitor/Neutral,Visitor Points,Home/Neutral,Home Points, , p,Attend.,Arena,Notes])
# print (listData)#打印
listData.append([Date])
print (listData)#
https://www.basketball-reference.com/leagues/NBA_2014_games-december.html
会爬取指定的网页,解析表格数据,并将结果打印出来。它将会获取比赛的日期和时间,访问队伍和它们的得分,主场队伍和它们的得分,比赛成绩链接的URL,加时赛,观众数量,以及比赛地点
import time
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}#爬虫[Requests设置请求头Headers],伪造浏览器
url= 'https://www.basketball-reference.com/leagues/NBA_2014_games-december.html'
params = {"show_ram":1}
response = requests.get(url, params=params, headers=headers) #访问url
listData = [] #定义数组
soup = BeautifulSoup(response.text, 'html.parser') #获取网页源代码
tr = soup.find('tbody').find_all('tr') #.find定位到所需数据位置 .find_all查找所有的tr(表格)
for j in tr:
th = j.find_all('th') # 查找所有的th(表头)
td = j.find_all('td') # 查找所有的td(表格数据)
if th and td: # 确保每行都有数据
Date = th[0].get_text().strip() # 日期和时间
Visitor_Team = td[0].get_text().strip() # 访问队伍
Visitor_Points = td[1].get_text().strip() # 访问队伍的得分
Home_Team = td[2].get_text().strip() # 主场队伍
Home_Points = td[3].get_text().strip() # 主场队伍的得分
Box_Score = 'https://www.basketball-reference.com' + td[4].a['href'] if td[4].a is not None else '' # 比赛成绩链接URL
Overtime = td[5].get_text().strip() # 加时赛
Attend = td[6].get_text().strip() # 观众数量
Arena = td[7].get_text().strip() # 比赛地点
listData.append([Date, Visitor_Team, Visitor_Points, Home_Team, Home_Points, Box_Score, Overtime, Attend, Arena])
# 输出结果
for data in listData:
print(data)
你好,你可以尝试使用Python的BeautifulSoup库来爬取网页里的表格数据。在你的代码中,你已经使用了BeautifulSoup库来获取网页源代码并定位到所需数据位置。如果你遇到了困难,可以参考以下链接中的四种方法来爬取网页表格数据https://zhuanlan.zhihu.com/p/351603761。
此外,你的代码中有一些注释掉的行,这些行可能会导致语法错误。如果你想要将这些行解除注释,请确保它们是正确的,并且不会影响你的代码
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
根据您提供的代码,您的目标是从指定网页中爬取表格数据并将其放入一个列表中。您使用了Requests库发送HTTP请求,并使用BeautifulSoup库解析网页源代码。
然而,根据您的描述,您遇到了困难,因为网页看起来比较复杂,您无法成功爬取表格数据。
在处理复杂的网页结构时,以下是一些建议和解决方法:
综上所述,处理复杂网页爬取问题需要具体针对网页结构进行分析和处理。由于我无法直接访问特定的网页,也无法查看网页的具体结构,因此无法给出针对您的情况的具体解决方法。
我建议您按照上述建议进行尝试,并根据具体情况进行调整。如果您遇到具体问题或错误信息,请提供更详细的描述,我将尽力提供帮助。
数据都在网页中,都是静态数据,比较好爬取,不用分析网络请求,我比较习惯用 xpath,所以就用 xpath 写的爬虫代码
import requests
from lxml import etree
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
start_url = 'https://www.basketball-reference.com/leagues/NBA_2014_games-december.html'
params = {"show_ram": 1}
response = requests.get(start_url, params=params, headers=headers).content.decode('utf-8') # 访问url
html = etree.HTML(response)
# 获取表格的标题
titles = html.xpath('//table[@id="schedule"]/thead/tr/th/text()')
del titles[7]
del titles[6]
#获取整列的内容
date_game = html.xpath('//table[@id="schedule"]/tbody/tr/th/a/text()')
game_start_time = html.xpath('//table[@id="schedule"]/tbody/tr/td[1]/text()')
visitor_team_name = html.xpath('//table[@id="schedule"]/tbody/tr/td[2]/a/text()')
visitor_pts = html.xpath('//table[@id="schedule"]/tbody/tr/td[3]/text()')
home_team_name = html.xpath('//table[@id="schedule"]/tbody/tr/td[4]/a/text()')
home_pts = html.xpath('//table[@id="schedule"]/tbody/tr/td[5]/text()')
box_score_text = html.xpath('//table[@id="schedule"]/tbody/tr/td[6]/a/text()')
attendance = html.xpath('//table[@id="schedule"]/tbody/tr/td[8]/text()')
arena_name = html.xpath('//table[@id="schedule"]/tbody/tr/td[9]/text()')
game_remarks = html.xpath('//table[@id="schedule"]/tbody/tr/td[10]/text()')
if not len(game_remarks):
game_remarks = [ '' for i in range(len(date_game)) ]
# print(date_game)
# print(game_start_time)
# print(visitor_team_name)
# print(visitor_pts)
# print(home_team_name)
# print(home_pts)
# print(box_score_text)
# print(attendance)
# print( arena_name )
# print( game_remarks )
listData = [titles]
for i in zip( date_game,game_start_time,visitor_team_name,visitor_pts,home_team_name,home_pts,box_score_text,attendance, arena_name,game_remarks):
listData.append(list(i))
print(listData)
可以爬取出来打印到excel中,如下代码:
import time
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
} # 爬虫[Requests设置请求头Headers],伪造浏览器
# 核心爬取代码
url = 'https://www.basketball-reference.com/leagues/NBA_2014_games-december.html'
params = {"show_ram": 1}
response = requests.get(url, params=params, headers=headers) # 访问url
outwb = Workbook() #声明Workbook
outws = outwb.worksheets[0] # 定义excel 的sheet
soup = BeautifulSoup(response.text, 'html.parser') # 获取网页源代码
tr = soup.find('tbody').find_all('tr')
# .find定位到所需数据位置 .find_all查找所有的tr(表格)
# 去除标签栏
outws.append(['Date','Start(ET)','Visitor/Neutral','PTS','Home/Neutral','PTS','','Attend.','Arena','Notes'])
for j in tr[1:]: # tr2[1:]遍历第1列到最后一列,表头为第0列
listData = [] # 定义数组
th = j.find_all('th') # th表格
thDate = th[0].get_text().strip()
listData.append(thDate)
tds = j.find_all('td') # td表格
for k in tds[0:]:
tdDate = k.get_text().strip()
listData.append(tdDate)
outws.append(listData)
outwb.save(r'test.xlsx')
因为上传不了excel附件,所以我就截图吧
我可以提供解决方案。 首先,需要使用爬虫库(比如requests、beautifulsoup等)爬取网页,获取表格数据。然后,使用数据处理库(比如pandas)将数据存入列表中。 以下是一个参考代码,使用requests和pandas库实现:
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 发送请求,获取网页内容
url = "https://www.basketball-reference.com/leagues/NBA_2014_games-december.html"
r = requests.get(url)
html_content = r.text
# 解析网页内容,获取表格数据
soup = BeautifulSoup(html_content, 'html.parser')
table = soup.find('table')
table_rows = table.tbody.find_all('tr') # 获取表格行数据
# 存储数据到列表中
data = []
for row in table_rows:
cols = row.find_all('td')
cols = [col.text.strip() for col in cols]
data.append(cols)
# 把数据存入pandas的dataframe中
df = pd.DataFrame(data, columns=['date', 'away_team', 'away_pts', 'home_team', 'home_pts', 'overtime', 'attendance', 'notes'])
注意,该代码仅适用于该仅有的网页,如果使用在其他网页上可能会出现问题,需要根据具体情况进行调整。
另外,为了保证程序的稳定性,建议添加异常处理和反爬虫机制,以免被网站屏蔽。