ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

爬取哔哩哔哩热点搜索的小demo(练手)python

2021-07-22 13:01:09  阅读:192  来源: 互联网

标签:练手 python proDict replace 爬取 item json pymysql 哔哩


爬取流程

  1. 先找到浏览器标识头(User-Agent也可以网上搜这个头子)
    红圈是头,复制出来在这里插入图片描述
  2. (关键)找传回数据的url
    目标网站:b站搜索
    爬取这个:在这里插入图片描述
    开始我直接通过网页渲染数据爬取框内内容,发现这些内容是ajax请求渲染,网站加载完成才渲染出数据,不能第一时间爬取到,然后我开始另辟蹊径。。。找了好久终于找到
    在这里插入图片描述
    找到传回数据后面就好办了。。。。
  3. 代码实现
    先导需要的库 ,mysql连python用到: pip install pymysql
#python程序
#字典
import requests
import json
import pymysql.cursors


#加头标识
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'
}

product=[]
#获取传回数据
resp=requests.get('https://s.search.bilibili.com/main/hotword?mid=&buvid=98E676EF-F586-403E-8440-52A6836FA68713451infoc&jsonp=jsonp&callback=jsonCallback_bili_58910703464582290',headers=headers)

rest=resp.text.replace('jsonCallback_bili_58910703464582290(','').replace(')','')
    #转换json键值对

json_data=json.loads(rest)

comments=json_data["list"]
#     #把想要的数据装入列表中
proDict=[]
for item in comments:
    proDict.append(item['keyword']+' ')
product.extend(proDict)

# 把数组里所有数据都转入字符串中(这里是学习用的,可以去除)
p=''.join(proDict)

print(p)


# 数据入库
# 连接数据库
conn = pymysql.connect(
          host='127.0.0.1',
          port=3306,
          user='root',
          passwd='root',
          db='bilidb',
          charset='utf8',
          cursorclass=pymysql.cursors.Cursor,
         )

cur=conn.cursor()
#这里用replace解决数据入库时重复数据的问题,注意hotword字段要设置唯一约束
for item in proDict:
        cur.execute("replace into hot(hotword) values('%s')" %(item))
#事务提交(这里尝试性的用了一个异常处理,嘿嘿可以去掉)
try:      
    conn.commit()
except AttributeError:
    print("错误")
cur.close()

数据库结构
在这里插入图片描述

数据库上记得把字段设置编码方式为utf-8,以解决中文乱码问题。

标签:练手,python,proDict,replace,爬取,item,json,pymysql,哔哩
来源: https://blog.csdn.net/qq_18643245/article/details/118996084

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有