前几天写爬虫的时候,遇到一个网站(music.bbbbbb.me)通过ajax异步加载实现内容的呈现,当时我就懵了——以前从未遇到过,而一般的教程中没有这样的东西!
网上大多的教程讲的都是基础性的,普遍性的,对于不同的场景其实都是需要做出稍微改进的。
比如说大多数的爬虫教程吧,可以分为这几类:
这两类都是授人以鱼,而且具有很大局限性——针对特定的网站管用。
这些的话是授人以渔,会告诉你为什么这样用,这样用有什么效果,具有简单的逻辑。
但有一句话是这么说的:师父领进门修行在个人。这些不用花费很大“代价”的教程,最多是渔网,不会是鱼叉,比较凶猛的鱼就没啥办法了。这时候有两个办法:
但是不同的鱼,你可能需要不同的鱼叉,甚至可能需要鱼雷,直接买肯定是没问题,但是如果你需要战略性武器——超级无敌厉害的捕鱼工具。就会有技术垄断,你花多少钱都买不到。所以我觉得,学会自己造鱼叉很重要。
造鱼叉,在这个问题上体现为如下几个步骤:
以上就是我造出鱼叉的大致过程,当然只是主要步骤。
Python实现抓取并按照一定格式封装为json文件,以便发送给前段。
# coding:utf-8
import requests
import json
headers={
'Host':'music.bbbbbb.me',
'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding':'gzip, deflate',
'Referer':'http://music.bbbbbb.me/',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With':'XMLHttpRequest',
'Content-Length':'47',
'Connection':'keep-alive',
'Pragma':'no-cache',
'Cache-Control':'no-cache'}
data={
'input':mname,'filter':'name','type':'netease','page':'1'}
url = 'http://music.bbbbbb.me/'
mname=input("music name:")
wbdata = requests.post(url,headers=headers,data=data).text
#print(wbdata)
data = json.loads(wbdata)
for n in data['data']:
author = n['author']
url = n['url']
print("歌手:",author,"下载地址:",url)
总结一下,解决这个问题我大概经历了以下几个步骤:发现问题(怎么没有下载地址)——依靠已有知识初步剖析(应该在js文件里)]-——搜索资源(如何获取)——整理资源——尝试解决——遇到bug1(没有正确获取到json)——探索bug1——解决bug1(成功获取到json)——继续解决问题(获取json中的作者和url项)——遇到bug2(提示错误)——探索bug2——解决bug2(成功输出)
更多文章欢迎访问我的博客www.chen517.xyz
0.Python爬虫实战入门五:获取JS动态内容—爬取今日头条
https://blog.csdn.net/yaoyaoyao2/article/details/79215658
1.python读取json文件:
https://www.cnblogs.com/laoniubile/p/6036919.html
2.python爬取ajax请求,返回的json数据格式化报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0):
https://blog.csdn.net/beta_safe/article/details/80456438
3.解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)问题:
https://blog.csdn.net/zaishijizhidian/article/details/81273222
4.在线json格式化效验工具
http://www.bejson.com/
5.Python爬虫之json:
https://blog.csdn.net/qq_41396296/article/details/80767528
6.python 爬取网页json数据处理:
https://blog.csdn.net/weixin_41972401/article/details/79892588
7.如何使用 Python 得到网页返回正确的 Json 数据:
https://zhidao.baidu.com/question/204694165549922445.html
8.json中json.loads()和json.dumps()的区别:
https://blog.csdn.net/qq_42807295/article/details/81274118
9.python错误:TypeError: string indices must be integers:
https://blog.csdn.net/wangpeng2011314/article/details/79388543
10.ajax异步加载:
https://www.cnblogs.com/wt627939556/p/6287242.html
11.【2】Python爬虫:分析AJAX传递的JSON获取数据-初步分析动态网页(1):
https://blog.csdn.net/qq_36779888/article/details/79210713
12.如何使用 Python 得到网页返回正确的 Json 数据:
https://zhidao.baidu.com/question/204694165549922445.html
13.python爬取ajax请求,返回的json数据格式化报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) - beta_safe的博客 - CSDN博客:
https://blog.csdn.net/beta_safe/article/details/80456438