2018/2/27,这是我的第一篇博客,写的目的很单纯,就是记录自己学习过程中遇到的问题以及解决方法。
初次学习爬虫,本人不才,代码其实也是学习一些B站视频。下面开始爬取的步骤
由于是为了爬取粉丝的评论,所以我们的目标就是要找到包含评论的代码,再将其解析并保存下来
1.找到代码
爬取的网页是https://m.weibo.cn/status/4160547165300149(鹿晗和关晓彤宣布恋爱关系的那篇微博,别问我为什么,我不是鹿晗粉,瞎找的),通过查看源代码,没有找到关于粉丝评论的只言片语,找到开发者页面,滑动网页,有get请求弹出,进入请求网址,查看到具有粉丝评论的大串信息(我用的火狐浏览器)。至此,网页代码找到,现在可以开始写代码了。
2.关键部分,代码来了
# 模块导入
import requests
import pandas as pd
import json
import time
# 设置头部和cookie,反爬,伪装
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0'}
Cookie = {'Cookie':'_T_WM=a44631c71b0383c78a0b6cc916df85b3; WEIBOCN_FROM=1110006030; M_WEIBOCN_PARAMS=uicode%3D20000061%26fid%3D4160547165300149%26oid%3D4160547165300149'}
url = 'https://m.weibo.cn/api/comments/show?id=4160547165300149&page=1'
html = requests.get(url,headers=header,cookies=Cookie)
ii = 1
while html.status_code == 200:
ii = ii + 1
url_next = 'https://m.weibo.cn/api/comments/show?id=4160547165300149&page=' + str(ii)
# 仔细观察网页源码结构,上面得到的html是个多重嵌套字典
try:
for jj in range(len(html.json()['data']['data'])):
data1 = [(html.json()['data']['data'][jj]['id'],
html.json()['data']['data'][jj]['user']['screen_name'],
html.json()['data']['data'][jj]['created_at'],
html.json()['data']['data'][jj]['source'],
html.json()['data']['data'][jj]['user']['id'],
html.json()['data']['data'][jj]['user']['profile_url'],
html.json()['data']['data'][jj]['user']['profile_image_url'],
html.json()['data']['data'][jj]['text'])]
data2 = pd.DataFrame(data1)
data2.to_csv('C:/Users/HP/Desktop/learn_test/weibo.csv', header=False, index=False, mode='a+')
except:
None
time.sleep(2) #设置爬取间隔,太过频繁有可能会被微博认定为爬虫(虽然我们本来就是爬虫,手动滑稽。。。)
html = requests.get(url_next,headers=header,cookies=Cookie)
代码中我将爬取到的数据保存为csv文件,通过简单的数据分析,得知评论的人群中所用的手机型号多数为OPPO、vivo和苹果
3.遇到的问题
出现下列报错信息,网上找了很久解决方法,包括增加解码decode('utf-8'),都是没解决,最后还是靠大神慧眼,看出代码中头部'User-Agent'信息不完整,导致报错。
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 30: ordinal not in range(256)
4.总结
理清了爬虫的基本流程及模块的简单应用