用python3.5逛今日头条
来源:互联网 发布:z3735 ubuntu 编辑:程序博客网 时间:2024/05/16 01:08
用python3.5逛今日头条
环境:
win10 64位
python3.5.2
相关库
urllib
pymysql
json
爬文章入口
baseurl : http://www.toutiao.com/search_content
- (ps:图片来自网络)
接触python,发现python真是一门让人上瘾的语言,简单好用效率高.
不多说,直接看要做什么吧.每天看头条也是一种乐趣,当想看同一类型的头条新闻时,可以直接搜索关键字,突然间对这个搜索接口感兴趣了,为什么不把这些搜到的文章存下来然后想什么时候看就什么时候看呢?
打开头条搜索F12看看它的网络请求.
参数
offset=40&format=json&keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&autoload=true&count=20&cur_tab=1
用代码构造参数,模拟请求
#构造请求参数,模拟请求def get_index_page(offset, keyword):query_data = { 'offset': offset, 'format': 'json', 'keyword': keyword, 'autoload': 'true', 'count': 20, # 每次返回 20 篇文章 'cur_tab': 1}params = urlencode(query_data)# 头条搜索api基础入口base_url = 'http://www.toutiao.com/search_content/'url = base_url + '?' + paramsprint(url)try: response = requests.get(url) if response.status_code == 200: #print(response.text) return response.text return Noneexcept RequestException: print("页面索引出错,url") return None
用print看看返回的结果是啥,分析请求结果(ps:每次写爬虫的时候总是觉得分析这个请求结果是最费时间的,但有时最关键的,每次还要对着页面去查这些字段的意义)
找到一些想要要的信息,关键是title,article_url
# 解析数据,获取想要的数据def parse_index_page(html):params = []data = json.loads(html)datas = data['data']for item in datas: if 'title' in item:#文章标题 title = item['title'] if 'source' in item:#资源归属 source = item['source'] if 'article_url' in item:#资源链接 url = item['article_url'] if 'share_url' in item:#分享链接,可作资源链接用 share_url = item['share_url'] if 'keywords' in item:#所属关键词 keyword = item['keywords'] if 'comment_count' in item:#评论数 countgood = item['comment_count'] if 'has_video' in item:#是否是视频链接 has_video = item['has_video'] params.append([title, source, url, share_url, keyword, countgood, has_video])return params
已经拿到一些数据了,要对数据进行储存
使用的pymysql库进行MySQL数据库操作
# 需要指定编码集,不然会出异常!!!(很重要)db = pymysql.connect("localhost", "用户名", "密码", "数据库名称", use_unicode=True, charset='utf8')cursor = db.cursor()#储存至数据库def save_data(params):try: sql = 'INSERT INTO toutiao_python VALUES (%s,%s,%s,%s,%s,%s,%s)' # 批量插入数据库 cursor.executemany(sql, params) db.commit()except Exception as e: print(e) db.rollback()
之前直接的想法是查到一条数据储存一条数据,发现效率太低了,仔细想了下,这么好用的语言不可能不能批量储存数据,仔细找了下api 发现cursor.executemany(sql, params)这个方法能批量储存数据,效率提升很多.
最后开个多线程来加快爬虫效率
# 指定搜索的参数offset范围为[CRAWLER_GO*20,(CRAWLER_END+1)*20]CRAWLER_GO = 1CRAWLER_END = 50# 搜索关键字,可以改变# 开启多线程if __name__ == '__main__':pool = Pool()group = [x * 20 for x in range(CRAWLER_GO, CRAWLER_END + 1)]pool.map(main, group)pool.close()pool.join()
- 运行结果
源代码见github
阅读全文
1 0
- 用python3.5逛今日头条
- python3.x 爬取今日头条
- 今日头条算法
- 面试-今日头条
- 今日头条
- 今日头条
- 今日头条
- 今日头条面试
- 今日头条导航
- 仿今日头条
- 今日头条笔试
- 今日头条面试
- 今日头条效果
- 模拟今日头条
- 今日头条模拟
- 今日头条
- 今日头条
- 今日头条--笔试
- CSS3图片水平居中常用方法
- Ajax缓存原理
- leetcode 540. Single Element in a Sorted Array
- NSRunLoop 概述和原理
- LightOJ
- 用python3.5逛今日头条
- 【机器学习实战】第10章 K-Means(均值)聚类算法
- Bmob导入DEMO的各种辛酸史(下)
- linux 怎么把^M去掉
- 多线程/并发笔记:Java并发编程之this逃逸问题
- Android Parcelable的使用
- 从本地安装Eclipse插件详解
- 2017智慧树人类与生态文明答案单元测试答案
- css初始化