Каталог статей
предисловие
Пример кода для сканирования данных об игроках НБА с помощью Python. Отправив HTTP-запрос, проанализируйте HTML-страницу, затем извлеките необходимую информацию о рейтинге, имени, команде и счете и сохраните результат в файл.
Импорт необходимых библиотек и модулей
import requests
from lxml import etree
- Используйте
requests
библиотеку для отправки HTTP-запросов. - Используйте
lxml
библиотеку для разбора HTML.
Установить заголовок запроса и адрес запроса
url = 'https://nba.hupu.com/stats/players'
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
- Установить информацию заголовка запроса, включая User-Agent.
- Установите адрес запроса «https://nba.hupu.com/stats/players».
Отправить HTTP-запрос и получить ответ
resp = requests.get(url, headers=headers)
- Используйте
requests
библиотеку для отправки HTTP-запроса GET и передачи URL-адреса запроса и информации заголовка запроса. - Сохраните возвращенный ответ в переменной
resp
.
Обработать результат ответа
e = etree.HTML(resp.text)
- Используйте
etree.HTML
функции для синтаксического анализа возвращенного текста ответа в активный объект дерева элементов HTML. - Сохраните проанализированный результат в переменной
e
.
Аналитические данные
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()')
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()')
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()')
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()')
- Используйте выражения XPath для извлечения необходимых данных из дерева элементов HTML.
- Сохраните рейтинг (nos), имена (names), команды (teams) и баллы (scores) в соответствующих переменных.
сохранить результат в файл
with open('nba.txt', 'w', encoding='utf-8') as f:
for no, name, team, score in zip(nos, names, teams, scores):
f.write(f'排名:{
no} 姓名:{
name} 球队:{
team} 得分:{
score}\n')
- Откройте файл
nba.txt
для режима записи ('w') и кодировки UTF-8. - Используйте
zip
функцию для одновременного перебора рейтингов, имен, команд и результатов, объединяя их в кортеж. - Запишите данные каждой строки в файл в соответствии с указанным форматом.
полный код
# 引入 requests 库,用于发送 HTTP 请求
import requests
# 引入 lxml 库,用于解析 HTML
from lxml import etree
# 设置请求的地址
url = 'https://nba.hupu.com/stats/players'
# 设置请求头信息,包括用户代理(User-Agent)
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
# 发送HTTP GET请求,并传入请求地址和请求头信息,将返回的响应保存在变量resp中
resp = requests.get(url, headers=headers)
# 使用etree.HTML函数将返回的响应文本解析为一个可操作的HTML元素树对象
e = etree.HTML(resp.text)
# 使用XPath表达式从HTML元素树中提取需要的数据
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()')
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()')
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()')
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()')
# 打开一个文件`nba.txt`,以写入模式('w')进行操作,编码方式为UTF-8
with open('nba.txt', 'w', encoding='utf-8') as f:
# 使用zip函数同时遍历排名、姓名、球队和得分,将它们合并成一个元组
for no, name, team, score in zip(nos, names, teams, scores):
# 将每一行的数据按照指定格式写入文件中
f.write(f'排名:{
no} 姓名:{
name} 球队:{
team} 得分:{
score}\n')
подробный анализ
# pip install requests
import requests
Импортируйте requests
библиотеку, которая используется для отправки HTTP-запросов.
# pip install lxml
from lxml import etree
Импортируйте lxml
библиотеку, которая используется для разбора HTML.
# 发送的地址
url = 'https://nba.hupu.com/stats/players'
Установите адрес, на который необходимо отправить запрос.
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
Установить информацию заголовка запроса, включая User-Agent. Эта информация сообщает серверу, что наш запрос отправлен из браузера, а не сканера, чтобы избежать блокировки механизмом антикраулера.
# 发送请求
resp = requests.get(url,headers = headers)
Используйте requests.get
метод для отправки HTTP-запроса GET и передачи URL-адреса запроса и информации заголовка запроса. Сохраните возвращенный ответ в переменной resp
.
e = etree.HTML(resp.text)
Используйте etree.HTML
эту функцию, чтобы преобразовать возвращенный текст ответа в активный объект дерева элементов HTML. etree.HTML
Принимает параметр типа string, используемый здесь resp.text
для получения текстового содержимого ответа.
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()')
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()')
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()')
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()')
Используйте выражения XPath для извлечения необходимых данных из дерева элементов HTML. Здесь четыре выражения XPath используются для извлечения данных о рейтинге, имени, команде и счете и их сохранения в переменных , nos
и соответственно .names
teams
scores
with open('nba.txt','w',encoding='utf-8') as f:
for no,name,team,score in zip(nos,names,teams,scores):
f.write(f'排名:{
no} 姓名:{
name} 球队:{
team} 得分:{
score}\n')
Откройте nba.txt
файл с именем в режиме записи ('w') и используйте кодировку UTF-8. Затем используйте zip
эту функцию для одновременного перебора ранга, имени, команды и счета, объединяя их в кортеж. Перебирая каждый кортеж, запишите данные каждой строки в файл в соответствии с указанным форматом.
Таким образом, код реализует сканирование данных об игроках НБА и сохраняет результат в nba.txt
файл.
текущий результат
заключение
С помощью примера кода в этой статье вы узнаете, как использовать Python для обхода данных игроков НБА. Мы использовали библиотеку запросов для отправки HTTP-запросов, библиотеку lxml для анализа HTML и выражения XPath для извлечения необходимых данных. Наконец, сохраните результат в файл. Этот пример может помочь вам понять основные принципы и этапы работы сканера, а также получить данные об игроках НБА. Я надеюсь, что эта статья поможет вам понять и освоить технологию поисковых роботов Python.