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()

requests + bs4 爬取豌豆荚所有应用的信息的更多相关文章

  1. requests+bs4爬取豌豆荚排行榜及下载排行榜app

    爬取排行榜应用信息 爬取豌豆荚排行榜app信息 - app_detail_url - 应用详情页url - app_image_url - 应用图片url - app_name - 应用名称 - ap ...

  2. python爬取豌豆荚中的详细信息并存储到SQL Server中

    买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...

  3. requests bs4 爬取 资讯 图片

    #!/usr/bin/env python # Version = 3.5.2 # __auth__ = '无名小妖' import requests from bs4 import Beautifu ...

  4. [实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  5. python实战项目 — 使用bs4 爬取猫眼电影热榜(存入本地txt、以及存储数据库列表)

    案例一: 重点: 1. 使用bs4 爬取 2. 数据写入本地 txt from bs4 import BeautifulSoup import requests url = "http:// ...

  6. 使用request+bs4爬取所有股票信息

    爬取前戏 我们要知道利用selenium是非常无敌的,自我认为什么反爬不反爬都不在话下,但是今天我们为什么要用request+bs4爬取所有股票信息呢?因为他比较原始,因此今天的数据,爬取起来也是比较 ...

  7. requests+正则爬取豆瓣图书

    #requests+正则爬取豆瓣图书 import requests import re def get_html(url): headers = {'User-Agent':'Mozilla/5.0 ...

  8. requests+正则表达式爬取ip

    #requests+正则表达式爬取ip #findall方法,如果表达式中包含有子组,则会把子组单独返回出来,如果有多个子组,则会组合成元祖 import requests import re def ...

  9. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

随机推荐

  1. oracle函数 VSIZE(X)

    [功能]返回X的大小(字节)数 [参数]x select vsize(user),user from dual; 返回:6 asdied select length('adfad合理') " ...

  2. CNN输出维度的计算

    在 CNN 的一层中的 patch 中共享权重 w ,无论猫在图片的哪个位置都可以找到.   当我们试图识别一个猫的图片的时候,我们并不在意猫出现在哪个位置.无论是左上角,右下角,它在你眼里都是一只猫 ...

  3. CSS长度单位:px和pt的区别

    先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点:而pt就是point,是印刷行业常用单位,等于1/72英寸. 这样很明白,px是一个点,它不是自然界的长度单位,谁能说出一个 ...

  4. C运行时库函数和API函数的区别和联系

    C运行时库函数 C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的.    API函数 API函数是操作系统为方便用户设计应用程序而提供的实现特定功能的函数,API函数也是C语言的函 ...

  5. Android 使用SystemBarTint设置状态栏颜色

    做项目时,发现APP的状态栏是系统默认的颜色,突然想到,为啥别的APP是自己设置的颜色(和APP本身很相搭),于是也想给自己的APP设置系统状态栏的颜色,更加美美哒... 搜了下,发现原来设置状态栏居 ...

  6. 命名分组(?<name>....)

    捕获组分为: 普通捕获组(Expression) 命名捕获组(?Expression) 普通捕获组 从正则表达式左侧开始,每出现一个左括号"("记做一个分组,分组编号从 1 开始. ...

  7. iptables 连线追踪(Connection tracking)

    「连線追蹤」:提供可用於判断包相关性的额外资讯.举例来說,一次FTP session同时需要两条分离的连線,控制与资料传输各一:用於追蹤FTP连線的扩充模组,运用对於FTP恊定的认知,从控制连線上流动 ...

  8. 容器服务kubernetes federation v2实践五:多集群流量调度

    概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...

  9. 为什么有时候Css样式表某个属性引用不成功?

    首次使用博客,很多东西都在探索,第一篇文章也不知道发布点什么,就随便写写,是在word里面写的,也懒得排版,将就这用吧. 闲着没事找了酷狗的API写了个简单的静态网页,完成了搜索,展示,播放功能.就想 ...

  10. Android Studio(十一):代码混淆及打包apk

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...