1.分析豌豆荚的接口的规律

- 获取所有app的接口url

2.往每一个接口发送请求,获取json数据

  • 解析并提取想要的数据

    • app_data:

      • 1.图标

        app_img_url
  • 2.名字

    app_name

    - 3.下载量

    app_download_num

    - 4.大小

    app_size

    - 5.简介

    app_comment

    - 6.详情页url

    app_detail

mysql_control.py

import pymysql

class MySQL:
def __init__(self):
self.client = pymysql.connect(
host='127.0.0.1',
port=3306,
user='tomjoy',
password='123456',
database='wandoujia',
autocommit=True,
) self.cursor = self.client.cursor(
pymysql.cursors.DictCursor
) def execute(self, sql, args):
try:
self.cursor.execute(sql, args)
except Exception as e:
print(e) def close(self):
self.cursor.close()
self.client.close()

main.py

import requests
import re
from bs4 import BeautifulSoup
from mysql_control import MySQL # 1.发送请求:
def get_html(url):
res = requests.get(url)
return res # 2.解析数据
def parse_data(data):
soup = BeautifulSoup(data, 'lxml')
# 获取所有的li标签,li中包含所有想要的数据
li_list = soup.find_all(name='li')
for li in li_list:
# app详情url
app_detail = li.find(name='a').attrs.get('href')
print('详情url:', app_detail) # app图标url
app_img_url = li.find(name='img').attrs.get('data-original')
print('图标url:', app_img_url) # app名称
app_name = li.find(name='img').attrs.get('alt')
print('名称:', app_name) # 下载人数
app_download_num = li.find(name='span', attrs={'class': 'install-count'}).text
print('下载人数:', app_download_num) # 大小
try:
# 有可能匹配规则是错的或者没有大小,然后获取不到text文本
app_size = li.find(name='span', attrs={'title': re.compile('MB')}).text
except Exception as e:
# 放弃匹配规则不一样的数据,默认为空字符串
app_size = ''
print('大小:', app_size) # 简介
app_comment = li.find(name='div', attrs={'class': 'comment'}).text
print('简介:', app_comment)
print('*' * 100) yield app_name, app_detail, app_img_url, app_download_num, app_size, app_comment # app_data = f"""
# '名称:', {app_name},
# '详情url:', {app_detail},
# '图标url:', {app_img_url},
# '下载人数:', {app_download_num},
# '大小:', {app_size},
# '简介:', {app_comment}
# """
# save(app_data) # 3.保存数据到数据库中
def save(generator_data, mysql_obj): for data in generator_data:
print(data)
sql = 'insert into wandoujia(app_name, app_detail, app_img_url, app_download_num, app_size, app_comment)' \
' values(%s, %s, %s, %s, %s, %s) '
print(sql)
mysql_obj.execute(sql, data) if __name__ == '__main__':
mysql_obj = MySQL()
# 1.获取所有app的接口url
for i in range(1,42):
url = f'https://www.wandoujia.com/wdjweb/api/top/more?resourceType=0&page={i}&ctoken=mrci2hDXHNxavE42fJ85v3JE' # 获取响应数据
res = get_html(url) # 将json数据转成字典
res_dict = res.json()
# 获取字典中data的值中的content的值
data = res_dict.get('data').get('content')
generator_data = parse_data(data) # 保存数据到数据库中
save(generator_data, mysql_obj) mysql_obj.close()

最新文章

  1. C#一探究竟——枚举
  2. SQL Server 2008数据库日志收缩
  3. C#:WebBrowser中伪造referer,为何对流量统计器无效?
  4. Fisrt Node-Webkit App
  5. Qualcomm Android display架构分析
  6. facl笔记
  7. net core 中间件详解及项目实战
  8. Java并发编程(您不知道的线程池操作)
  9. [Openfire]使用WebSocket建立Openfire的客户端
  10. pyinstaller打包py文件成exe文件时,出现ImportError: No module named 'pefile'错误解决办法!
  11. 显著性检测(saliency detection)评价指标之sAUC(shuffled AUC)的Matlab代码实现
  12. gitlab升级迁移(二)
  13. SpringBoot-将servlet容器变成undertow测试tomcat吞吐量
  14. EZ 2018 05 26 NOIP2018 模拟赛(十六)
  15. MP实战系列(十六)之性能分析插件
  16. requests爬取百度贴吧:python 美女 3
  17. noip2007-4
  18. RabbitMQ客户端负载均衡算法
  19. 【Unix网络编程】chapter2传输层:TCP,UDP和SCTP
  20. “App.exe 以附加有调试器,但没有将该调试器配置为调试此未经处理的异常。”

热门文章

  1. 2019-7-20-win10-uwp-使用-msbuild-命令行编译-UWP-程序
  2. python之 算法和数据结构
  3. Core Data 数据出现Fault
  4. SuperSocket SuperWebSocket并发数100限制的问题
  5. POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
  6. 【DCN】Wireless Intranet Captive Portal
  7. H3C PPP会话建立过程
  8. Python--day41--threading中的定时器Timer
  9. 浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比
  10. LA 3942 ——Trie (前缀树)、DP