首先感谢陈堰平老师这几天辛苦的教学,不管是助教还是学员,在您的课堂上都收获良多!!我借助陈老师总结的思维导图展开介绍一下爬虫
首先要明确一点,爬虫是从网站中提取到我们需要的数据,而网站是程程序员写的,每个网站的使用的语言、每个人代码的习惯、每个数据在网站中的位置肯定不会是一模一样的,我们需要根据网站的情况不断更改我们的爬虫
一、网页基础
简单说一下静态网页和动态网页对于爬虫的区别,静态网页中的全部内容,都在网页的源代码中,可以直接从源代码里获取,但是动态网页的内容,需要服务器根据操作发送给浏览器
区分网页类型,可以在网页的源代码中搜索我们在浏览器界面里看到的内容,如果能找到内容,就是静态网页
明确了网页类型,还需要区分网页向服务器发送请求的方式,主要有get和post两种方式,区分的方法见下图
二、不同情况网站的代码
1.第一个是静态网站的方法,我是定义了一整个函数,这是最后的结果,但是过程中需要一步步执行保证代码的准确性,包括列表推导式中的内容也是一步一步添加上的,要保证代码的准确性才能最后定义函数。
#get方式的静态网站
#载入必要的包
import requests as req
from bs4 import BeautifulSoup
import pandas as pd
#定义爬虫函数
def movie_comment(x) :
names = []
star = []
date = []
comments = []
support = []
for j in range(0,x,20) :
#url是网站地址
url = "https://movie.douban.com/subject/26979199/comments?start="+str(j)+"&limit=20&sort=new_score&status=P"
#get函数获取网站下的所有元素
movies_0 = req.get(url).content
#BeautifulSoup解析网站的元素
movies = BeautifulSoup(movies_0,'html.parser')
#提取我们需要的网站内容,find_all函数查找所有span模块,并且要求了模块的属性
#{'class':'comment-info'}
names = names + [i.a.string for i in movies.find_all('span',{'class':'comment-info'})]
star = star + [i.find_all('span')[1].get('class')[0] for i in movies.find_all('span',{'class':'comment-info'})]
date = date + [i.string.strip().strip('\n') for i in movies.find_all('span',{'class':'comment-time'})]
comments = comments + [i.string for i in movies.find_all('span',{'class':'short'})]
support = support + [i.string for i in movies.find_all('span',{'class':'votes'})]
#把我们需要的变量输入到文本框,指定列名
df=pd.DataFrame({
'names': names ,
'star' : star ,
'date' : date ,
'comments' : comments ,
'support' : support
})
#文件写出到csv
df.to_csv('movies_comment.csv',index=False)
return df
#调用爬虫函数
movie_comment(140)