前言
为啥要学Python呢?是因为看了好多爬xx条数据分析xx,看的我心潮澎湃,而且工作上没有任何的技术相关任务,都是写PPT写材料,感觉自己越来越废 - -
文章写给自己,督促自己学习。
好多自己踩的坑都忘了 = = 再踩再补吧
Python的安装
第一次用的python3.7+pycharm的组合,后来重装系统后直接换成anaconda省时省力,不过出现过导入的包不好用的问题,忘了怎么解决的 - - (坑一)
如何开始爬虫
我是参考了一本书《PYTHON网络爬虫从入门到实践》,好多基础性的知识是从这本书前半本学习的,如果基础一般的同学可以参考一下,简单的例子还是不错的。(说实话看了这本书基本后边都不用写了ε=(´ο`*)))唉)
另:我还参考了另一位大佬的文章,https://blog.csdn.net/wenxuhonghe/article/details/84649103
附上仿写上边网址自己的代码,之前程序一直出错的原因,是start_time有的地方写成了strat_time,因为这个一直迟迟没有弄出来 - -,有时候小细节是真的要命。
另:我是写成了一坨,没有分开,这样是想让自己捋顺整个的逻辑,可能观看感受上不如贴的上个网址的作者。
import requests
import json
import datetime
import time
headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'}
start_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
end_time = '2018-12-2 00:00:00'
while start_time > end_time:
url = 'http://m.maoyan.com/mmdb/comments/movie/42964.json?_v_=yes&offset=0&startTime=' + start_time.replace(' ', '%20')
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
# 解析json数据
json_data = json.loads(r.text)['cmts']
comment_list = []
for item in json_data:
comment = {
'nickName': item['nickName'],
'cityName': item['cityName'] if 'cityName' in item else '',
'content': item['content'].strip().replace('\n', ''),
'score': item['score'],
'startTime': item['startTime']
}
comment_list.append(comment)
#html = None
start_time = comment_list[14]['startTime']
#print(start_time)
start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')+datetime.timedelta(seconds=-1)
print(start_time)
start_time = datetime.datetime.strftime(start_time, '%Y-%m-%d %H:%M:%S')
#存储数据
for item in comment_list:
with open('text_ajax2.txt', 'a',encoding='utf-8')as f:
# print(item)
f.write(item['nickName'] + ',' + item['cityName'] + ',' + item['content'] + ',' + str(item['score']) + ',' + item['startTime'] + '\n')
后续
参考的网站中,说offset也可以实现翻页,后续打算试试用offset实现翻页看看结果是否和这个一样。
-------------------------------------------------------------------
2019.1.25 14:56
完成了用offset实现翻页的方式,借鉴文章地址
https://blog.csdn.net/wenxuhonghe/article/details/86515558
其实就是多了一步找出一共有多少评论的地方,paging中有个total就是了,读取一下,作为最大值就好了。
附上代码
import requests
import json
import datetime
import time
import pandas as pd
#获取网页html内容
def get_data(url):
headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'}
try:
r = requests.get(url,headers = headers)
return r.text
except requests.HTTPError as e :
print(e)
except:
print("unknown error")
#获取感兴趣的信息数组
def prase_data(html):
json_data = json.loads(html)['data']['comments']
comment_list = []
for item in json_data:
comment = []
comment.append(item['nick'])
comment.append(item['content'].strip().replace('\n',''))
comment_list.append(comment)
return comment_list
def save_data(comments):
filename = 'offset.txt'
dataframe = pd.DataFrame(comments)
dataframe.to_csv(filename, mode='a', index=False, sep=',', header=False)
def main():
#获取评论总数
url = 'http://m.maoyan.com/review/v2/comments.json?movieId=1208282&userId=-1&offset=45&limit=15&ts=1548396952162&type=3'
html = get_data(url)
totals = json.loads(html)['paging']['total']
print(totals)
page = 0
#翻页,读取所有评论并存储
while page< totals:
url = 'http://m.maoyan.com/review/v2/comments.json?movieId=1208282&userId=-1&offset=' + str(page) + '&limit=15&ts=1548396952162&type=3'
html = get_data(url)
comments = prase_data(html)
save_data(comments)
print(page)
page+=15
if __name__ == '__main__':
main()
print('完成')