python库使用方法查询 app应用_Python爬虫实战(5)获取「最美应用」推荐APP数据...
前言
蛋肥学习了Scrapy框架,打算实践一下,利用Scrapy来爬取一下最美应用推荐APP的数据,并储存到MySQL数据库中。
准备
爬取时间:2021/02/04
系统环境:Windows 10
所用工具:Jupyter Notebook\Python 3.0
涉及的库:scrapy\requests\json\lxml\pymysql
获取基础数据
创建项目
#cmd里依次执行代码,创建scrapy项目
cd C:\Users\Archer\Desktop
scrapy startproject appSpider
定义目标字段
#对项目文件夹里的items.py做以下修改
import scrapy
class appspiderItem(scrapy.Item):
app_name = scrapy.Field() #名称
app_intro = scrapy.Field() #描述
app_like = scrapy.Field() #喜爱数
app_time = scrapy.Field() #发布时间
app_link = scrapy.Field() #详情链接
app_content = scrapy.Field() #推荐内容
创建爬虫器
#cmd里依次执行代码,创建爬虫器
cd C:\Users\Archer\Desktop\appSpider
scrapy genspider app zuimeia.com
修改爬虫器
#对项目文件夹里的app.py做以下修改
import scrapy
import requests
import json
from lxml import etree
from appSpider.items import appspiderItem
class AppSpider(scrapy.Spider):
name = 'app'
allowed_domains = ['zuimeia.com']
start_urls = ['http://zuimeia.com/apps/?page=1&platform=2']
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"}
url_head="http://zuimeia.com/apps/?page="
url_end="&platform=2"
#从start_requests开始发送请求
def start_requests(self):
for i in range(1,11):
url=self.url_head+str(i)+self.url_end
yield scrapy.Request(url=url,callback=self.parse, headers=self.headers)
#获取推荐页面的相关数据
def parse(self, response):
html=etree.HTML(response.text)
app_name=html.xpath('//a[@class="app-title"]/h1/text()')
app_intro=html.xpath('//a[@class="quote-text"]/text()')
app_time=html.xpath('//span[@class="pub-time"]/text()')
app_link=html.xpath('//a[@class="app-title"]/@href')
#因喜爱数是动态加载的,通过Network找到实际url,单独进行解析
app_id=html.xpath('//a[@class="app-title"]/@data')
app_like=[]
for i in range(len(app_id)):
like_link="http://zuimeia.com/apps/up/?ids="+str(app_id[i])
r=requests.get(like_link,headers=self.headers,timeout=10)
json_string=r.text
json_data=json.loads(json_string)
like=json_data["data"][0].get(str(app_id[i]))
app_like.append(like)
#将数据封装到appspiderItem
for i in range(len(app_name)):
item=appspiderItem()
item["app_name"]=app_name[i]
item["app_intro"]=app_intro[i]
item["app_time"]=app_time[i]
item["app_link"]=app_link[i]
item["app_like"]=app_like[i]
yield scrapy.Request(url="http://zuimeia.com"+app_link[i],meta={"item":item},callback=self.parse2)
def parse2(self, response):
item=response.meta["item"]
#提取内容
html=etree.HTML(response.text)
text=html.xpath('//*[@id="article_content"]/p/text()')
app_content=""
for i in range(len(text)):
app_content=app_content+text[i]
item["app_content"]=app_content
yield item
创建数据库
#在Workbench里创建数据库
CREATE DATABASE app;
USE app;
CREATE TABLE zuimeiapp(
id INT NOT NULL AUTO_INCREMENT,
app_name VARCHAR(50) NOT NULL,
app_intro VARCHAR(500) NOT NULL,
app_like VARCHAR(50) NOT NULL,
app_time VARCHAR(50) NOT NULL,
app_link VARCHAR(100) NOT NULL,
app_content VARCHAR(5000) NOT NULL,
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id)
);
修改存储文件
#对项目文件夹里的pipelines.py做以下修改,因数据量较少,用同步操作
from itemadapter import ItemAdapter
import pymysql
class AppspiderPipeline():
def __init__(self):
#打开数据库链接
self.conn=pymysql.connect("localhost","root","password","app",charset='utf8')
#获取操作游标
self.cursor=self.conn.cursor()
def process_item(self,item,spider):
#SQL插入语句
sql="""INSERT INTO zuimeiapp(app_name,app_intro,app_like,app_time,app_link,app_content) VALUES(%s,%s,%s,%s,%s,%s);"""
try:
#执行语句
self.cursor.execute(sql,(item["app_name"],item["app_intro"],item["app_like"],item["app_time"],item["app_link"],item["app_content"]))
#提交到数据库执行
self.conn.commit()
except:
#如果出错就回滚
self.conn.rollback()
def close_spider(self,spider):
#关闭数据库
self.cursor.close()
self.conn.close()
修改设置文件
#对项目文件夹里的settings.py以下内容取消注释
ITEM_PIPELINES = {
'appSpider.pipelines.AppspiderPipeline': 300,
}
运行爬虫
#cmd里依次执行代码,运行爬虫
cd C:\Users\Archer\Desktop\appSpider
scrapy crawl app
大功告成
数据库里的部分数据
总结
scrapy的多线程机制可使抓取速度变快。
根据数据量的多少,可以选择同步或异步操作将数据写入数据库。
python库使用方法查询 app应用_Python爬虫实战(5)获取「最美应用」推荐APP数据...相关推荐
- python音乐下载器交互界面设计_Python爬虫实战:制作各大音乐平台的聚合的音乐下载器...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python技术,作者 派森酱 转载地址 https://blog ...
- python网易云听歌时长_Python爬虫实战:爬取小姐姐最近的听歌曲目
前言 作为网易云村的深度用户,网易云音乐应该是我除了微信外打开时间最长的 App 了.并不是应为网易云上面的歌曲多,而是因为那些走心的评论.边听歌边刷评论,感觉就像是走进了他人的人生之中,从另外一种意 ...
- 你的app是由旧版打造_「软件测试基础知识」Web APP和原生 APP的不同
原生APP访问和兼容的能力也比较好,可以支持在线或者离线消息推送或是进行本地资源访问,以及摄像.拨号.蓝牙.功能的调取.原生APP开发有许多的优势,如原生APP是针对不同的平台为用户提供不同的体验.节 ...
- python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...
- python中的headers是什么意思_python爬虫实战:request如何定义headers
都说知识之间是相互汇通和包容的,借着我们之前才讲过header的热乎劲,为大家带来新朋友request的同时,也不忘记再来跟我们的老朋友header见见面.说到这里已经有小伙伴开始好奇,request ...
- python的pip安装-pip安装python库的方法总结
使用pip安装python库的几种方式 1.使用pip在线安装 1.1 安装单个package 格式如下: pip install SomePackage 示例如下: 比如:pip install s ...
- Python 库安装方法:pip安装tar.gz压缩包,pip安装whl文件
Python 库安装方法 第一章:标准安装 ① Python 安装 tar.gz 压缩包 ② Python 安装 whl 文件 第二章:失败异常处理 ① whl 安装失败:whl is not a s ...
- [习题].FindControl()方法 与 PlaceHolder控件 #2(动态加入「子控件」的事件)
这是我的文章备份,有空请到我的网站走走, http://www.dotblogs.com.tw/mis2000lab/ 才能掌握我提供的第一手信息,谢谢您. http://www.dotblogs.c ...
- python成绩查询系统_Python爬虫实战:登录教务系统查成绩
本文记录我用Python登录教务系统查询成绩的过程.手动输入验证码,简单获取成绩页面.后续将可能更新自动识别验证码登录查询 前期准备 本爬虫用到了Python的Requests库和BeautifulS ...
最新文章
- Linux学习笔记重新梳理20180702 之 yum软件包管理器
- JavaScript引擎研究与C、C++与互调用(转)
- Spring中Bean的生命周期是怎样的?
- 一个DDOS病毒的分析(一)
- 大蜘蛛序列号_Datacolor SpyderX 蓝蜘蛛 (红蜘蛛)校色仪 使用教程
- EF中关于TransactionScope的使用
- 神秘黑客攻陷密码管理器 Passwordstate 部署恶意软件,发动软件供应链攻击
- .Net Core之MVC项目的简单应用
- drop_caches 释放哪些
- vim使用:全局搜索并跳转
- edge/chrome更新113版本后页面崩溃 STATUS_STACK_BUFFER_OVERRUN解决方案
- java 判断字符串重排后是否等于另一个字符串,包括空格符
- 钉钉企业内部开发报错notInDingTalk
- html5游戏视频UI框架,推荐几个精致的web UI框架
- uniapp引入使用pixi.js遇到的坑
- 电驱动机电一体化仿真
- 欧美简约商务PPT模板
- 985研究生入职电网6个月,晒出收入,还以为看错了,kafka实战pdf
- 数据库MySQL(一) 常用查询语句
- skynet源码分析之定时器skynet_timer.c