前言
本人初学爬虫练习写的爬虫代码,如有什么问题和建议,欢迎留言交流!
一、什么是动态网页?
- 静态网页:存粹的HTML格式的网页,没有后台数据库
、不含程序和不可交互的网页; - 动态网页:与静态网页相对的,可以跟后台数据库进行交互、数据传递。
- 最后,不要将动态网页跟页面是否有动感混为一谈,重点在于网页是否采用了动态网页技术,是否可以交互。
二、具体步骤
1. 如何爬取动态网页上的数据
-
对于静态网页,使用requests等库可以很方便的得到它的网页源码,然后提取出想要的信息。但是对于动态网页,情况就要复杂很多,这种页面的源码往往只有一个框架,其内容都是由JavaScript渲染出来的。这时候,我们就可以使用selenium来直接驱动浏览器进行爬取。
selenium是一个自动化测试工具,利用它可以驱动浏览器进行一系列操作,并且可以得到当前呈现的网页的源码,对动态页面的爬取非常有效。
-
爬取动态网页上的数据,可分为两种情况:
- 如果从爬取的HTML文件中分析得知,我们所爬取的文件的url跟页码有关系,我们可以根据规律自己构造url来爬取文件(下面的例子就是这一种情况);
- 如果从爬取的HTML文件中分析发现,文件url是固定不变的或者跟页码没有关系,这时候需要简单的模拟浏览器点击行为来请求网页再爬取,这种效率相对比较慢,不适合多页爬取的情况。
爬取动态网站的关键点是抓包分析。只要能从包中分析出关键的数据,剩下写爬虫的步骤就和写静态网页的爬虫一般无二了。
2.爬取网页数据需要用到的库
- PhatomJS是一个没有界面的浏览器,用它来读取JS加载的页面,具体下载方式可百度,他不是python的第三方库,需要下载自己添加环境变量;当然也可以使用Chrome、firefox、IE等。
- Selenium是python的第三方库,命令行输入:pip install selenium下载,它可以模拟用户对浏览器进行一些操作
- Phatom JS + Selenium抓取动态网页
- 使用requests库获取图片
- 使用beautifulSoup解析抓取的网页内容
- 使用os库创建文件和获取文件夹中的文件名称列表
代码如下(示例):
import os
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
# 网页url,该url和页码存在规律,下一页的url是将后面的offset=0改为offset=100,具体可自己测试
WEB_URL = 'https://music.163.com/#/artist/album?id=101988&limit=100&offset=0'
# 保存图片的文件夹
FOLDER_PATH = 'D:/BeautifulPicture'
# 应对服务器反爬机制(会根据User-Agent辨别是浏览器访问还是代码访问,代码访问会被拒绝,所以需要使用headers伪装一下)的请求头,这里我们用的是PhatomJS浏览器,所以不需要
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
class AlbumCover:
def