学习笔记
整合一下静态爬虫的整体的思路
先获取URL对应网址的html的内容;再获取对应的内容(在这里我使用的是re模块进行解析);将对应的数据进行保存
# 首先说明一下坑,由于没有使用IP代理池,第一次爬取的时候被封了IP
1、首先是得到网页的html内容,因此在这里,直接使用的 request.get(url, headers,timeout)
因此在这里编写代码的时候,
需要给出一个base_url:就是对应网页的总体的url部分,再结合urlencode进行编码的操作
# 获得对应的网页数据
def get_one(num):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
params = {
'start' : str(num),
# 'limit': '20',
# 'sort' : 'new_score',
# 'status' : 'P',
# 'percent_type' : ''
}
base_url = 'https://movie.douban.com/subject/27663984/reviews?'
url = base_url + urlencode(params)
try:
response = requests.get(url,headers=headers,timeout=10)
if response.status_code == 200:
return response.text
except EOFError as e:
print(e)
return None
header:对应的头,可以去头部代理寻找自己想要的
params这个数据填写要结合网页的url本身书写:采用键值对的形式
注意很重要的一点就是进行异常处理,根据每一种情况写出对应的错误处理,防止代码运行直接崩溃
status_code == 200的时候去提取网页的html信息
通过这个操作,我们能够得到网页的静态的html内容
2、解析的模块,直接使用re模块,编写正则表达式来进行操作
re.findall() 是得到在 html 中匹配的所有内容信息,再 for 循环得到每一个单独的项
心得:
2.1、将html内容先放到一个本地的txt文件夹下查看,然后对于每一个标签中具体的属性都要在正则表达式中体现出来,不然正则表达式是会陷入循环,无法得到内容。
2.2、每一个内容都使用strip()处理一下,得到干净的字符串
3、将数据写入csv文件
主要是练习写csv文件的操作,
fieldnames是对应的csv的头部,在这里,我们把数据做成一个字典的列表
直接使用csv.DictWriter(f,fieldnames=)得到一个操作csv文件对象,使用writeheader()直接对应的属性
writerows(字典的列表):内容成功写入csv文件