问题描述:
爬取新浪体育上的NBA球队信息,使用bs4爬取html的时候发现球队名称及链接python获取不到,但是chromeF12是可以看到的
url_downed = urlopen(response)
html = BeautifulSoup(url_downed,features="html.parser")
html_teams = html.select('a[href*="//slamdunk.sports.sina.com.cn/team?tid="]')
# 这里select不到内容,但是下图中可以看到
这是因为内容在JavaScript的代码中,为了能让我们看到其中的内容,浏览器会对JavaScript代码进行渲染,得到其中的内容后再呈现到我们面前。然而,爬虫程序无法对HTML文件中的JavaScript代码进行渲染。因此,如果我们的目标镶嵌在JavaScript中,那么我们爬到的数据往往就会缺少目标内容。
解决方法
1. requests-html
requests-html是一个轻量级的HTML解析模块,可以让我们模仿浏览器的行为,隐式地渲染js内容(即打开浏览器,渲染,点击等动作不会在前台展示过程,类似于selenium,只不过更轻量级)
pip install requests-html
安装模块
修改之前的代码为:
session = HTMLSession()
first_page = session.get('https://slamdunk.sports.sina.com.cn/roster')
first_page.html.render(sleep=0.5) # 留出网页渲染的时间
html = BeautifulSoup(first_page.html.html, features="lxml") # 这里要用lxml
html_teams = html.select('a[href*="//slamdunk.sports.sina.com.cn/team?tid="]')
成功