鱼C论坛

 找回密码
 立即注册
查看: 1353|回复: 5

爬虫:从b站找编程最火的排序

[复制链接]
发表于 2022-4-30 19:29:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
鼓捣一小时了,,看完小甲鱼的实战自己导了下,发现这个为什么跟小甲鱼说的不一样啊 。检索之后我觉得就应该是找 h3的标签然后'属性是"bili-video-card__info--tit"  结果soup里一个没有,我把soup导出来 也没有叫h3的这个标签。。。

人傻了,求会爬虫的大神 告诉下这个怎么找啊。

然后想请教下各位大神爬虫里怎么能快速定位到我需要这个标签和这个属性啊。。。。有啥技巧么


import requests
import bs4

url ='https://search.bilibili.com/all?keyword=编程'
res = requests.get(url)

soup = bs4.BeautifulSoup(res.text, 'html.parser')
titles = soup.find_all('h3',class_ ="bili-video-card__info--tit") ##得出来得title是空得
捕获.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-30 21:07:48 | 显示全部楼层
浏览器看到的码源是浏览器经过html加载,css渲染和javascript处理之后的结果,和requests get的不一样是很正常的。
你怕的这个页面的数据,并没有直接放在html里,而是放在了后续的ajax加载过程。
Screenshot 2022-04-30 205423.jpg

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-30 22:30:41 | 显示全部楼层
suchocolate 发表于 2022-4-30 21:07
浏览器看到的码源是浏览器经过html加载,css渲染和javascript处理之后的结果,和requests get的不一样是很 ...

这样看是的 。。 我就照着你给我发的还找了一会 。。。    那就是意思是如果源码没有放在html里 我只能在网络里找
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-1 00:40:45 | 显示全部楼层
Victor0321 发表于 2022-4-30 22:30
这样看是的 。。 我就照着你给我发的还找了一会 。。。    那就是意思是如果源码没有放在html里 我只能在 ...

直接在其他response搜不到这个url,估计这个url是根据javascript生成的,想找出生成URL的方法可能有点困难,估计得用javascript逆向相关的库,建议刚学爬虫先不研究逆向。
先找点别的简单的网页学习吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-1 01:08:22 | 显示全部楼层
suchocolate 发表于 2022-5-1 00:40
直接在其他response搜不到这个url,估计这个url是根据javascript生成的,想找出生成URL的方法可能有点困 ...

emmm  是的,(虽然我没接触过html)我现在检索的时候都能发现那个对应的标签和属性,但是我导出beautiful soup的时候都找不到我在检索里的标签和元素,所以这些都是被java写出来的是嘛,都是后续加载出来的 所以我需要在你说的那个子文件里去一个一个找到,然后在经过json转换 在慢慢找到我需要的内容对嘛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-1 01:09:41 | 显示全部楼层
suchocolate 发表于 2022-5-1 00:40
直接在其他response搜不到这个url,估计这个url是根据javascript生成的,想找出生成URL的方法可能有点困 ...

嘻嘻,我根据您给我找到的response 刚写了一个导出排行的脚本!完全各种卡壳  json导出来的文件也好难读懂哦,  其实我是不是用正则表达式会更快找到我需要的啊

import requests
import json
import re
import openpyxl as xl
import time

def get_input():
    keywords = input("请输入关键词:")
    pages = int(input("请输入要爬取得页数(1~28):"))

    while pages not in range(1, 28):
        pages = int(input("请输入正确的页数:"))

    return keywords, pages


def get_res(url):
    headers = {
        'uesr-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
        }

   
    res = requests.get(url, headers = headers )
    soup = json.loads(res.text) ##转换成json
    data = (soup['data']['result'])[-1]['data']  ##定位到数据结构层
    result = []
   
    for i in data:
        i['title'] = i['title'].replace('<em class="keyword">','')
        i['title'] = i['title'].replace('</em>','')##删除掉一些没过滤掉的信息
        result.append([i['title'],i['play'],i['favorites'],i['author'],i['arcurl'],i['description']]) ## 以列表的形式导出需要的数据【标题,播放量,点赞,UP主,URL,简介】

    return result

def save_excel(result,keywords):
    wb = xl.Workbook()
    wb.guess_types = True ## 1 是数字 0 代表是文本
    ws = wb.active

    ws.append(['标题','播放量','点赞','UP主','URL','简介'])

    for each in result:
        ws.append(each)

    ##排版
    ws.column_dimensions['A'].width  = 80
    ws.column_dimensions['E'].width  = 45
    ws.freeze_panes = 'F1'

    for i in ws['A1':'F1']:
        for j in i:
            j.font  = xl.styles.Font(size = 16 ,bold = True , color = 'FF0000')
            
    wb.save(f'B站{keywords}排行版.xlsx')

def main():
    keywords , pages = get_input()
    result_pages = []
   
    for i in range(1,pages+1):
        url = f'https://api.bilibili.com/x/web-interface/search/all/v2?__refresh__=true&_extra=&context=&page={i}&page_size=42&order=&duration=&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&keyword={keywords}&preload=true&com2co=true'

        result_pages.extend(get_res(url))
        save_excel(result_pages,keywords)
        
if __name__ =='__main__':
    main()



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表