网页结构的相似性
爬虫的目的,是从网站中 自动化 的 批量 提取数据。
首先尝试完成以下操作:
从以下链接中提取电影的标题和标题后的年份:
- https://movie.douban.com/subject/1292052/
- https://movie.douban.com/subject/1962665/
- https://movie.douban.com/subject/26752088/
从以下链接中提取每只股票的实时价格(最大那个数字):
- http://stock.finance.sina.com.cn/usstock/quotes/aapl.html
- http://stock.finance.sina.com.cn/usstock/quotes/bidu.html
- http://stock.finance.sina.com.cn/usstock/quotes/msft.html
链接相似 的网页通常具有相似的外观。
外观相似 的网页通常具有相似的网页结构。
这两个相似性是爬虫能够从一系列网站中自动化提取数据的重要基础。
代码:
from requests_html import HTMLSession session = HTMLSession() links = ['https://movie.douban.com/subject/1292052/', 'https://movie.douban.com/subject/1962665/', 'https://movie.douban.com/subject/26752088/'] for link in links: r = session.get(link) title = r.html.find('#content > h1 > span:nth-child(1)', first=True) year = r.html.find('#content > h1 > span.year', first=True) print(title.text, year.text)
也许你用了上面的 股票价格 链接作为爬取对象,你会惊讶的发现程序运行出错了。
事实上,很多网站使用 Javascript 代码来生成网页内容,你的爬虫需要正确解析 Javascript 才能获得你所看到的页面。
requests_html 库提供了一个简单的方法来处理应对情况,你只需要在 r = session.get(link)
后,增加一行 r.html.render()
,重新运行代码即可。
(初次运行时需要下载一些辅助工具,请耐心等待,如果下载进度条迟迟未能出现,重新运行程序。)
from requests_html import HTMLSession session = HTMLSession() links = ['http://stock.finance.sina.com.cn/usstock/quotes/aapl.html', 'http://stock.finance.sina.com.cn/usstock/quotes/bidu.html', 'http://stock.finance.sina.com.cn/usstock/quotes/msft.html'] for link in links: r = session.get(link) r.html.render() title = r.html.find('#content > h1 > span:nth-child(1)', first=True) year = r.html.find('#content > h1 > span.year', first=True) print(title.text, year.text)