入门级爬虫
本实战使用python 3.6版本
首先找到目标网站 新浪的NBA数据库
然后点开奇才就出现奇才所以球员的基本信息:
我的想法是先在第一个页面获得所以球队的url,再根据球队获得所以球员的基本信息
有思路就立马动手于是在浏览器中默默的按了F12,开始调试,右键奇才
发现url的规律”team.php?id=×× “并多打开了几个其他队的发现也是这样的
找到规律于是立马动手代码如下:
from urllib.request import urlopen,Request
from bs4 import BeautifulSoup
from urllib.error import HTTPError #处理请求异常的库
def get_url(url):
#模拟浏览器设置头数据
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063","Connection":"keep-alive"}
#异常处理
try:
response=Request(url,headers=head)
except HTTPError as error:
print(error)
else:
url_downed=urlopen(response)
html=BeautifulSoup(url_downed)
html_teams=html.select("a[href*='team.php?id=']")
#定义字典储存队名和url
urlteam={}
for team in html_teams:
#get_text()的得到队名 attrs得到url
urlteam[team.get_text()]=team.attrs["href"]
return urlteam
得到队名和url的字典urlteam
接下来就要爬球员基本数据了,同样的去网页找规律
发现刚好要爬的数据是第一个table
但是我又不希望把“号码,球员,位置”那一行爬下来于是找到不同
这行 缺少onmouseover属性于是:
urlteam=get_url('http://nba.sports.sina.com.cn/players.php')
i=1#用于计数
for key in urlteam:
value=urlteam[key]
try:
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063","Connection":"keep-alive"}
response=Request("http://nba.sports.sina.com.cn/"+value,headers=head)
res=urlopen(response)
except HTTPError as er:
print(er)
else:
print(i)#打印次数
resp=BeautifulSoup(res)
htmls=resp.find('table',{'width':'702'}).select("tr[onmouseover]")
f=open(r'C:\Users\lingxian\Documents\date.txt','a',encoding='utf-8')
f.write('____________'+key+'________________'+'\n')
for html in htmls:
f.write(html.get_text())
i=i+1
f.write('\n')
f.close()
结果如下: