Spider——爬取imooc网站实战课程下的所有课程名

Spider——爬取imooc网站实战课程下的所有课程名

  • Step1:构造请求网址
  • Step2:构造请求头
  • Step3:请求访问网页
  • Step4:解析网页
  • Step5:分析数据
  • Step6:提取数据
  • Step7:csv保存

本次任务为爬取imooc网站实战课程下的所有课程名
目标地址:https://coding.imooc.com/?sort=0&unlearn=0&page=1
根据目标实现爬虫可思考为如下七个步骤:
1、构造请求网址–>2、构造请求头–>3、请求访问网址–>4、解析网页–>5、分析数据–>6、提取数据–>7、数据保存为csv文件

Step1:构造请求网址

根据题目要求爬出目标网址下所有的课程名字,那么我们先打开网址进行分析。打开的界面如下:
Spider——爬取imooc网站实战课程下的所有课程名_第1张图片
我们可以看到这是第一页网址中的数据,在这里继续对URL进行分析,我们观察url如下几个字段:
https:传输协议,一般为http或https
coding.imooc.com:为域名
?:问号后面表示的都是一些请求参数
我们可以看到其中就有page=1这样的参数,即当我们将page参数改为2时可以发现界面切换到了第二页,效果如下图:
Spider——爬取imooc网站实战课程下的所有课程名_第2张图片

发现共有7页,其实也可以直接通过网站中给的切页控件来实现切换,但是实际爬虫的时候很多网站时要求你下载客户端才给你提供这样的接口。
在我们知道了有多少页url的含义以后,通过以下代码我们可以构造所有的url:
在这里插入图片描述

Step2:构造请求头

什么是请求头?
别人网页区别是人还是机器访问的一种手段,我们设置请求头为浏览器的请求头,对方就会认为我们是人为的访问,从而不会反爬,当然这只是最简单的一种防反爬的手段,一般我们都会带上,代码如下:
在这里插入图片描述
这串代码并不是我们自己手工敲的,从Google开发者工具中我们可以找到headers,其中的user-agent便是我们人为访问的一个请求头
Spider——爬取imooc网站实战课程下的所有课程名_第3张图片

Step3:请求访问网页

完成上述工作以后我们要请求访问网页,获取response响应,而我们这里只需要获得响应结果的html源码即可,代码如下:
Spider——爬取imooc网站实战课程下的所有课程名_第4张图片
response = requests.get(url, headers=headers)
使用 requests 库的 get 方法,去访问网页,第一个参数为网址,第二个参数为请求头,请求结果赋值给变量 response,其中里面有很多结果,状态响应码,网页源码,二进制等
response.status_code == 200
调用请求结果 response 中的 status_code 查看请求状态码,200 代表请求成功,就返回,否则返回一个 None,状态码一般有 2xx,4xx,3xx,5xx,分别代表请求成功,客户端访问失败,重定向,服务器问题。
return response.text
返回响应结果的 text,代表返回网页 html 源码

Step4:解析网页

获取网页以后我们需要对网页进行解析,解析代码如下:
在这里插入图片描述
我们看到这里的解析有变成了 html = etree.HTML(html)
这是使用 lxml 解析 html 的写法
使用 xpath 方法选择标签在 html 源码里的路径,// 是选择此 html 源码里所有 tr 标签并且 class 属性为 alt 的标签,其实这样方法很多,可以用BeautifulSoup来进行解析,也就是我们接下来下一步提取数据的时候方法就有不同,可以用select方法,可以用findall方法,可以用正则等等来提取我们所需要的数据,在这里我用lxml进行提取也挺方便,所以我们直接附上代码吧

Step5:分析数据

提取数据之前我们先简单的分析一下数据,检查课程名对应的元素
Spider——爬取imooc网站实战课程下的所有课程名_第5张图片

可以发现我们需要的数据都在

中,所以可以写代码如下:
在这里插入图片描述

返回的是一个列表,再一次循环列表的每一个标签,从中提取出对应的数据,上面的infos是满足所有条件的标签,接下来循环每一个子标签就好了
得到元素所在的xpath如下:
/html/body/div[7]/div[2]/div[1]/div[1]/div/div/div/a/p[1]
所有我们找到断点就可以写出name的子标签了,即
./div/div[2]/p[1]
所以可以直接写出提取数据代码

Step6:提取数据

即根据第五步断点完后直接得到子标签代码如下:
在这里插入图片描述
这时候就完成了我们数据的提取,最后再生成为csv文件就完成任务了
这里测试一下看看数据是不是都被爬下来了,爬取结果如下:
Spider——爬取imooc网站实战课程下的所有课程名_第6张图片
Spider——爬取imooc网站实战课程下的所有课程名_第7张图片
可以看到这里课程名称已经全爬下来了

Step7:csv保存

在这里保存方法使用的pandas模块进行存储
完整代码如下:
Spider——爬取imooc网站实战课程下的所有课程名_第8张图片

Spider——爬取imooc网站实战课程下的所有课程名_第9张图片
保存结果如下:
Spider——爬取imooc网站实战课程下的所有课程名_第10张图片
Spider——爬取imooc网站实战课程下的所有课程名_第11张图片
Spider——爬取imooc网站实战课程下的所有课程名_第12张图片

你可能感兴趣的:(Spider——爬取imooc网站实战课程下的所有课程名)