Python的Requests来爬取今日头条的图片和文章并且存入mongo

config.py

MONGO_HOST = 'localhost'
MONGO_PORT = 27017
MONGO_DB = 'toutiao'
MONGO_TABLE = 'toutiao'GROUP_START = 1
GROUP_END = 20
KEYWORD = '原油'

toutiao.py

import json
import os
from urllib.parse import urlencode
import pymongo
import requests
from multiprocessing import Pool
from requests.exceptions import ConnectionError
from hashlib import md5
from config import *client = pymongo.MongoClient(MONGO_HOST, MONGO_PORT)
db = client[MONGO_DB]def get_page_index(offset, keyword):data = {'autoload': 'true','count': 20,'cur_tab': 1,'app_name': 'web_search','format': 'search_tab','keyword': keyword,'offset': offset,}params = urlencode(data)base = 'https://www.toutiao.com/api/search/content'url = base + '?' + paramstry:response = requests.get(url)if response.status_code == 200:data = json.loads(response.text)if data  and 'data' in data.keys():if data.get('data') is not None:for item in data.get('data'):if item is not None:yield [item.get('article_url'), item.get('abstract'), item.get('large_image_url')]except ConnectionError:print('Error occurred')return Nonedef download_image(url):print('Downloading', url)try:response = requests.get(url)if response.status_code == 200:save_image(response.content)return Noneexcept Exception:return Nonedef save_image(content):file_path = '{0}/picture/{1}.{2}'.format(os.getcwd(), md5(content).hexdigest(), 'jpg')print(file_path)if not os.path.exists(file_path):with open(file_path, 'wb') as f:f.write(content)f.close()def save_to_mongo(result):if db[MONGO_TABLE].insert_one(result):print('Successfully Saved to Mongo', result)return Truereturn Falsedef main(offset):items = get_page_index(offset, KEYWORD)for item in items:if (item[2] is not None) and len(item[2])!=0:download_image(item[2])if (item[0] is not None and len(item[0]) != 0)\or  (item[1] is not None and len(item[1]) != 0)\or  (item[2] is not None and len(item[2]) != 0):json = {'article_url': item[0],'abstract': item[1],'large_image_url': item[2]}save_to_mongo(json)if __name__ == '__main__':pool = Pool()groups = ([x * 20 for x in range(GROUP_START, GROUP_END + 1)])pool.map(main, groups)pool.close()pool.join()

知识拓展:

一、用Flask+Redis维护Cookies池

为什什么要⽤用Cookies池

⽹网站需要登录才可爬取,例例如新浪微博

爬取过程中如果频率过⾼高会导致封号

需要维护多个账号的Cookies池实现⼤大规模爬取

Cookies池的要求

⾃自动登录更更新

定时验证筛选

提供外部接⼝口

代码:https://github.com/Python3WebSpider/CookiesPool

二、用Flask+Redis维护代理池

为什么要⽤用代理理池?

许多⽹网站有专⻔门的反爬⾍虫措施,可能遇到封IP等问题。

互联⽹网上公开了了⼤大量量免费代理理,利利⽤用好资源。

通过定时的检测维护同样可以得到多个可⽤用代理理。

代理理池的要求

多站抓取,异步检测

定时筛选,持续更更新

提供接⼝口,易易于提取

代码:https://github.com/Python3WebSpider/ProxyPool

三、VirtualEnv
  Virtualenv他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境。

安装,virtualenv本质上是个python包, 使用pip安装:

pip install virtualenv

在工作目录下创建虚拟环境(默认在当前目录):注意需要自定义虚拟环境的名字!

~$virtualenv TestEnvNew python executable in ~/TestEnv/bin/pythonInstalling setuptools, pip, wheel...done.

默认情况下, 虚拟环境中不包括系统的site-packages, 若要使用请添加参数:

语法:virtualenv --system-site-packages TestEnv

使用virtualenv默认python版本创建虚拟环境

语法:virtualenv --no-site-packages ubuntu_env

四、url去重策略

Python的Requests来爬取今日头条的图片和文章相关推荐

  1. Python 爬取今日头条的图片新闻

    工具 from urllib.parse import urlencode import requests 网页 进入今日头条,搜索图片新闻 往下进行网页刷新的时候,按f12选择xhr进行筛选可以看到 ...

  2. 用requests包爬取今日头条新闻标题

    全码如下: # requests # 用来发送url(请求request),获取服务器响应 import requests import json if __name__ == '__main__': ...

  3. Python爬虫:爬取今日头条“街拍”图片(修改版)

    前言 在参考<Python3网络爬虫开发实战>学习爬虫时,练习项目中使用 requests ajax 爬取今日头条的"街拍"图片,发现书上的源代码有些已经不适合现在了, ...

  4. python学习(五)爬取今日头条图库

    今天抽出时间写了一个小爬虫 来爬取今日头条的图片 简要的说下 1图片首页是通过ajax 发生请求 得到json数据 然后渲染到网页, 2然后每个详情页中 在获取的网页的源代码中 是包含图片地址的 但是 ...

  5. 简单爬虫Ajax数据爬取——今日头条图片爬取

    一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...

  6. 爬取今日头条街拍美女图片

    爬取今日头条美女图片需要分析Ajax请求 首先打开网址:https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D 返回的数据以及每个data ...

  7. [爬虫笔记01] Ajax爬取今日头条文章

    1.爬取分析 我们首先打开今日头条,搜索"罗志祥" 打开浏览器的开发者工具,红色框中就是我们请求到的数据 将搜索界面的滚动条滑到底,在开发者工具中就可以看到所有请求到的数据,加上前 ...

  8. 关于爬取今日头条图片中的链接的提取(ajax)

    在爬取今日头条的图片时,由于今日头条用了ajax加载图片,所以,通过re模块来对链接进行提取,但是在提取的过程中,遇到了一点小问题,如图: ['"{\\"count\\" ...

  9. python爬虫今日头条_python爬虫—分析Ajax请求对json文件爬取今日头条街拍美图

    python爬虫-分析Ajax请求对json文件爬取今日头条街拍美图 前言 本次抓取目标是今日头条的街拍美图,爬取完成之后,将每组图片下载到本地并保存到不同文件夹下.下面通过抓取今日头条街拍美图讲解一 ...

最新文章

  1. python数据分析常用的算法_萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (上)理解篇...
  2. c++重载后置++和--
  3. 学习笔记Hive(四) —— Hive应用(2)—— Hive导入及导出数据
  4. 20170513 Python练习册0011过滤敏感词
  5. [转]Effective C#原则4:用条件属性而不是#if
  6. scala的数值类型(三)
  7. ionic 去掉启动页的加载动画 菊花转
  8. Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(8)
  9. java jpanel对齐_java – 如何使用GridBagLayout在JPanel中对齐组件中心?
  10. 三台服务器的时间同步-Linux
  11. 兴奋神经递质——谷氨酸与大脑健康
  12. rocketmq源码③-Producer的启动、发送消息、路由broker
  13. 对选股宝实时信息进行爬虫
  14. OSChina 周日乱弹 ——书中自有颜如玉
  15. 深度搜索处理问题的关键 --- 做leetcode深度搜索类题目小结
  16. Ethical.Hacking.2021.10:BUILDING TROJANS
  17. 电脑鼠标不管用但键盘可以用怎么办
  18. 优化elelment ui 的 dialog 样式
  19. SAP FICO 成本对象控制解析
  20. 【经验】代码统计工具cloc

热门文章

  1. 数据湖和传统业务_在十六湖国家公园测量和计算流量
  2. Python元组,列表,字典,集合
  3. 04_Large_OAD
  4. 电源附近的电容的作用分析
  5. Windows 命令
  6. 正方形周长、面积求解c++
  7. 压缩感知详细介绍【赞】
  8. word怎么转excel?一键转换并不难
  9. JS之前台参数提交到后台,双引号转义为quot;解决办法
  10. oracle正整数集,Oracle 整理