首先吐槽一波csdn配色真直男,囧

此次任务需要注意的是:

用request.get方法的时候要加cookie,

网页源代码也改动了,详情页进入后不是一个json数据包,是一个html文档。

以及其它我在源代码里备注了的地方等等。

成功后返图:

以下为源代码(包括我自己手动记录的一些难点):

import json

from urllib.parse import urlencode

import requests

import re

import os

cookie = """这个我是不能粘贴的哈,自己登陆后用谷歌浏览器查看"""

header = {'User-agent': "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",

'cookie': cookie}

# 请求索引页

def get_page_index(keyword, offset):

data = {"aid": 24,

"app_name": "web_search",

"offset":offset,

"format": "json",

"keyword": keyword,

"autoload": "true",

"count": "20",

"en_qc": 1,

"cur_tab": 1,

"from": "search_tab",

"pd": "synthesis",

"timestamp": 1557999858125}

url = "https://www.toutiao.com/api/search/content/?" + urlencode(data)  # 这里用到urlib库的将参数转换为网址后缀

try:

r = requests.get(url, headers=header, timeout=20)

if r.status_code == 200:

# print(r.encoding)  # 从httpheader推测的编码格式

# print(r.apparent_encoding)  # 从内容中分析的解析编码格式

r.encoding = "json"  # 定义对此文档的解析编码格式,这里上面两种方法返回的编码格式都不对,我自己试出来的。笑哭

return r.text

except:

print("索引页获取失败!")

# 解析索引页json数据

def parse_page_index(html):

data = json.loads(html)  # 此处将json数据转为字典

if data and 'data' in data.keys():  # data 是否存在,data的键值对是否有‘data’

for item in data.get('data'):

yield item.get('article_url')  # 构造生成器。参考https://blog.csdn.net/mieleizhi0522/article/details/82142856

# 获取详情页

def get_page_detail(url):

try:

r = requests.get(url, headers=header)

return r.text

except:

print("获取详情页出错!")

# 处理详情页

def parse_page_detail(html):

gallery = re.findall(r"gallery: JSON.parse(.*?)siblingList", html, re.S) # r 是为了无视转义字符

if len(gallery) != 0:

for need_deal_gallery in gallery:  # 因为提取到的是个只有一项的列表,所以需要遍历。

deal_gallery = re.sub(r"(\\)", '', need_deal_gallery)  # 去掉字符串的转义字符,仍然是字符串

url_list = re.findall('(http.*?)"', deal_gallery, re.S)  # 返回列表

return url_list

# 下载图片

def download(url):

root = "/home/kaixin/桌面/今日头条图片//"

path = root + url.split('/')[-1]

try:

if not os.path.exists(root):

os.mkdir(root)

if not os.path.exists(path):

r = requests.get(url, headers=header)

with open(path, 'wb') as f:

f.write(r.content)

print("保存成功!")

except:

print("保存失败!")

def main(key, pages):

i = 0

while i <= pages:

offset = 20 * i

i += 1

dict_html = get_page_index(key, offset)

all_url_list = []

for url in parse_page_index(dict_html):

if url != None:  # 过滤不是网址的返回

html = get_page_detail(url)

url_lists = parse_page_detail(html)

if url_lists != None:  # 过滤不是组图的返回。因为组图函数处理不了,函数return中那块不能过滤。

for lis in url_lists:

all_url_list.append(lis)

for url in all_url_list:

download(url)

if __name__ == '__main__':

main("街拍", 3)   # 关键词,和页数

标签:爬取,get,python,gallery,组图,url,html,data,page

来源: https://blog.csdn.net/qq_44782847/article/details/90346105

python爬今日头条组图_(python爬虫之)ajax解析爬取今日头条组图并下载相关推荐

  1. python爬虫基础Ⅱ——Ajax数据爬取、带参请求:QQ音乐歌单、QQ音乐评论

    文章目录 基础爬虫部分Ⅱ Ajax技术 json 1. Network 2. XHR怎么请求? 3. 什么是json? 4. json数据如何解析? 带参数请求 1. 复习 2. params 3. ...

  2. Python爬虫-利用xpath解析爬取58二手房详细信息

    文章目录 前言 介绍 代码 运行结果截图 前言 简单的Python练习,对页面中的某些部分的文字进行爬取 介绍 xpath解析: 最常用且最便捷高效的一种解析方式.通用型.-xpath解析原理:- 1 ...

  3. python中for循环的用法_@Python小白,一文让你掌握Python爬虫

    兴趣 我没事喜欢逛知乎,有一段时间看到了这个问题:利用爬虫技术能做到哪些很酷很有趣很有用的事情: http://t.cn/RptGOPx 觉得回答的一个个炒鸡酷炫 就对爬虫产生了浓厚的兴趣, 于是就开 ...

  4. python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python

    请关注本号,后续会有更多相关教程. 系列文章 学Python还不会处理Excel数据?带你用pandas玩转各种数据处理"Python替代Excel Vba"系列(二):panda ...

  5. python c++情侣网名含义_#python和C/C++#让python和C/C++联姻

    让python不在孤单,轻易而举的为python写C/C++第三方库. 我们都知道python很慢,特别是处理大数据的时候,简直慢到极致,如果在知道代码的瓶颈的时候,可以将需要大量计算的数据块放在C/ ...

  6. puml绘制思维导图_强推:9款超好用思维导图APP

    思维导图是由英国著名教育学家东尼·博赞发明的一种思维利器,被誉为大脑的"瑞士军刀".运用思维导图,我们可以便捷地整理笔记.收集想法和统筹事项. 一. MindMaster 说起思维 ...

  7. jquery手写轮播图_用jQuery如何手写一个简单的轮播图?(附代码)

    用jQuery如何手写一个简单的轮播图?下面本篇文章通过代码示例来给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 用 jQuery 手写轮播图 先上个效果截图: 主要 ...

  8. 爬虫:Ajax数据爬取

    目录 1.什么是Ajax 1.1 实例的引入 1.2 基本原理 2.Ajax分析方法 1.查看请求 2.过滤请求 3.Ajax结果提取 1.分析请求 2.分析响应 3.例子 我们在用 requests ...

  9. python爬虫爬妹子图_【爬虫】直接上干货-爬取妹子图整站图片

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #coding=utf-8 import os import requests from lxml import etree import time cl ...

最新文章

  1. 另辟蹊径创建移动应用:iOS和Android代码共享
  2. 做项目时用到的linux知识
  3. teledb兼容mysql5.7_maridb安装
  4. 02-24 面向对象--方法重载、隐藏
  5. 全志和瑞芯微比较_哪家强_全志瑞芯微海思PK 智能芯片哪家强?
  6. 初识Activiti
  7. tail -f 命令卡住
  8. oracle11g 32021,64ビットのOracle Data Access Components(ODAC)のダウンロード
  9. postgresql安装postgis扩展模块
  10. Ochestrator企业数据总线
  11. NeoKylin中标麒麟系统用户和组的管理命令
  12. 高校动态|研究生被录取后放导师鸽子,学校要上报教育部失信名单取消其推免资格
  13. BDE Installer for RAD Studio
  14. Kali Linux 渗透测试之被动信息收集(三)——Recon-NG框架
  15. 从事嵌入式软件开发的好处是什么
  16. shell字符串截取掐头去尾操作
  17. 最全最强解析:支付宝钱包系统架构内部剖析(架构图)
  18. Day02 - CSS
  19. 文通Android平台证件识别SDK
  20. 使用matlab求解二维浅水方程的数值解(一)—浅水波

热门文章

  1. 华为防火墙性能指标监控
  2. 图表css,CSS3绘制简单图表 | Soo Smart!
  3. 一文看懂“语音识别ASR” | AI产品经理需要了解的AI技术概念
  4. EXCEL-SUMIFS多条件求和(筛选效果)
  5. 时分秒针旋转角度换算
  6. putty乱码解决方案
  7. 关于网站改版注意的网站优化问题
  8. 导航电子地图制作资质的办理指南
  9. Android 视频直播
  10. 洛谷P2312 秦九韶算法求多项式点值