提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
分析如何爬取某视频网址
一、分析搜索页,将链接列出
对当前页面展示的列表进行爬取和整理,步骤如下:
- 分析数据存在位置(html,js)
- 找到一个分割点对html所有代码进行分割
- 分割后找到相应的json数据
- 处理json数据得到链接
分析数据存在位置(html,js)
url="Ac--fun网页地址"
headers = {
"User-Agent": '自己的请求头'
}
response = requests.get(url, headers=headers)
获取数据, 获取网页源代码,对网页数据进行分析,因为查看源代码可以看到,数据只有120行,试问一个网页那么多标签和Css,怎么可能才120行,有两种可能(都和js有关),一种是有一个链接可以访问json,另一种是把json都加载到js的变量里了,所以就得去分析源码里的js和分析一些请求了.
方法如下:
找到一些关键字,确保是惟一或者为数不多的关键词,复制下来,然后去NetWork找请求包
找到所在位置之后分析其展示的结果,这明显是第二种:把所有json都加载到了一个js里面。这种情况就得找关键词对代码进行分割
找到一个分割点对html所有代码进行分割
至于为啥找下面这段呢,因为感觉它是独一无二的,为啥从第一个截取呢,因为它前面的基本上都是没用,目标主要是找json数据
ss = str(response.text).split("""</script><script type="text/javascript">bigPipe.onPageletArrive(""")
ss = ss[1:]
for i in ss:
print(i)
分割后找到相应的json数据
可以看到基本是json数据了,但是看到最下面的html标签就知道,我们还需要继续处理字符串,先将这些复制到一个创建的新json文件中,对其进行格式化Alt+Ctrl+L(Pycharm的快捷键),分出来之后的效果如下:
data_html = []
for i in ss:
i = i.replace(");</script></body>\n</html>", '')
if i[-2:] == ');':
i = i[:-2]
data_html.append(i)
with open("js_data.json", 'w', encoding='utf-8') as f:
st = '['
st1 = ''
for i in data_html:
st1 += str(i) + ','
st = st + st1[:-1] + ']'
f.write(st)
得到格式化的json数据,再对json进行分析
处理json数据得到链接
可以发现,这个json数据不深,非常浅,直接找到html就好,分析html的方法,就是直接去网页上F12进行查找
def child_spider(param):
'''
:param param: html的字符串
:return:
'''
soup = BeautifulSoup(param, 'html.parser')
div = soup.findAll("div", class_="search-video-card")
with open("href.txt", 'a+', encoding='utf-8') as f:
for i in div:
div_a = i.find("div", 'video__main__title ellipsis2')
a = div_a.find("a")
href = 'https://www.acfun.cn' + a['href'] + "\n"
f.write(href)
with open("js_data.json", 'r', encoding='utf-8') as f:
data = json.loads(f.read())
for o in data:
child_spider(o['html'])
二、对单个视频进行分析
下节
|