requests + bs4 爬取豌豆荚所有应用的信息
1.分析豌豆荚的接口的规律
- 获取所有app的接口url
2.往每一个接口发送请求,获取json数据
- 解析并提取想要的数据
- app_data:
- 1.图标
app_img_url
- 1.图标
- app_data:
- 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 爬取豌豆荚所有应用的信息的更多相关文章
- requests+bs4爬取豌豆荚排行榜及下载排行榜app
爬取排行榜应用信息 爬取豌豆荚排行榜app信息 - app_detail_url - 应用详情页url - app_image_url - 应用图片url - app_name - 应用名称 - ap ...
- python爬取豌豆荚中的详细信息并存储到SQL Server中
买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...
- requests bs4 爬取 资讯 图片
#!/usr/bin/env python # Version = 3.5.2 # __auth__ = '无名小妖' import requests from bs4 import Beautifu ...
- [实战演练]python3使用requests模块爬取页面内容
本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...
- python实战项目 — 使用bs4 爬取猫眼电影热榜(存入本地txt、以及存储数据库列表)
案例一: 重点: 1. 使用bs4 爬取 2. 数据写入本地 txt from bs4 import BeautifulSoup import requests url = "http:// ...
- 使用request+bs4爬取所有股票信息
爬取前戏 我们要知道利用selenium是非常无敌的,自我认为什么反爬不反爬都不在话下,但是今天我们为什么要用request+bs4爬取所有股票信息呢?因为他比较原始,因此今天的数据,爬取起来也是比较 ...
- requests+正则爬取豆瓣图书
#requests+正则爬取豆瓣图书 import requests import re def get_html(url): headers = {'User-Agent':'Mozilla/5.0 ...
- requests+正则表达式爬取ip
#requests+正则表达式爬取ip #findall方法,如果表达式中包含有子组,则会把子组单独返回出来,如果有多个子组,则会组合成元祖 import requests import re def ...
- 爬虫系列4:Requests+Xpath 爬取动态数据
爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...
随机推荐
- CTR+A组合键 以及终止按键事件传递
Key UP 或Down 事件中 实现CTR+A全选 if ( Control.ModifierKeys==Keys.Control && e.KeyCode == Keys.A) ...
- matplotlib绘制热力图
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/jin_tmac/article/deta ...
- 错误处理——According to TLD or attribute directive in tag file, attribute test does not accept any expres
应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute valu ...
- input标签和fmt:formatDate 在jsp中同时使用引号解决办法
input标签和fmt:formatDate 在jsp中同时使用引号解决办法 使用input标签设置默认值value并格式化fmt时间格式处理 格式化前: <input type="d ...
- 利用mock生成随机的东西
Mock.mock({ "list|100": [ { 'id|+1': 1,//id排列 'color': '@color()',//随机颜色 'date': '@datetim ...
- 数据库设计mysql字段不默认为NULL原因搜集
索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库设计时不要让字段的默认值为NULL ...
- hdu 3805 Triangle Conjecture
Problem - 3805 题意是给出边的长度的,求出边长相等的三角形,输出任意一种答案.边长是1~n的数,每个只能用一次. 其实比较容易可以看出,无论我们怎么操作,只要保持边长总和都是相邻整数就是 ...
- H3C 帧中继显示与调试(续)
- 漏洞: RHSA-2017:3075: wget security update
该网址有解决方案 http://www.stumblingblock.cn/3102.html
- Class对象的isAssignableFrom方法
isAssignableFrom 在看一个开源代码时,在加载完某个Class对象后,经常会使用 java.lang.Class#isAssignableFrom 来校验下. 之前真没有注意过Class ...