前言

蛋肥学习了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数据...相关推荐

  1. python音乐下载器交互界面设计_Python爬虫实战:制作各大音乐平台的聚合的音乐下载器...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python技术,作者 派森酱 转载地址 https://blog ...

  2. python网易云听歌时长_Python爬虫实战:爬取小姐姐最近的听歌曲目

    前言 作为网易云村的深度用户,网易云音乐应该是我除了微信外打开时间最长的 App 了.并不是应为网易云上面的歌曲多,而是因为那些走心的评论.边听歌边刷评论,感觉就像是走进了他人的人生之中,从另外一种意 ...

  3. 你的app是由旧版打造_「软件测试基础知识」Web APP和原生 APP的不同

    原生APP访问和兼容的能力也比较好,可以支持在线或者离线消息推送或是进行本地资源访问,以及摄像.拨号.蓝牙.功能的调取.原生APP开发有许多的优势,如原生APP是针对不同的平台为用户提供不同的体验.节 ...

  4. python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  5. python中的headers是什么意思_python爬虫实战:request如何定义headers

    都说知识之间是相互汇通和包容的,借着我们之前才讲过header的热乎劲,为大家带来新朋友request的同时,也不忘记再来跟我们的老朋友header见见面.说到这里已经有小伙伴开始好奇,request ...

  6. python的pip安装-pip安装python库的方法总结

    使用pip安装python库的几种方式 1.使用pip在线安装 1.1 安装单个package 格式如下: pip install SomePackage 示例如下: 比如:pip install s ...

  7. Python 库安装方法:pip安装tar.gz压缩包,pip安装whl文件

    Python 库安装方法 第一章:标准安装 ① Python 安装 tar.gz 压缩包 ② Python 安装 whl 文件 第二章:失败异常处理 ① whl 安装失败:whl is not a s ...

  8. [习题].FindControl()方法 与 PlaceHolder控件 #2(动态加入「子控件」的事件)

    这是我的文章备份,有空请到我的网站走走, http://www.dotblogs.com.tw/mis2000lab/ 才能掌握我提供的第一手信息,谢谢您. http://www.dotblogs.c ...

  9. python成绩查询系统_Python爬虫实战:登录教务系统查成绩

    本文记录我用Python登录教务系统查询成绩的过程.手动输入验证码,简单获取成绩页面.后续将可能更新自动识别验证码登录查询 前期准备 本爬虫用到了Python的Requests库和BeautifulS ...

最新文章

  1. Linux学习笔记重新梳理20180702 之 yum软件包管理器
  2. JavaScript引擎研究与C、C++与互调用(转)
  3. Spring中Bean的生命周期是怎样的?
  4. 一个DDOS病毒的分析(一)
  5. 大蜘蛛序列号_Datacolor SpyderX 蓝蜘蛛 (红蜘蛛)校色仪 使用教程
  6. EF中关于TransactionScope的使用
  7. 神秘黑客攻陷密码管理器 Passwordstate 部署恶意软件,发动软件供应链攻击
  8. .Net Core之MVC项目的简单应用
  9. drop_caches 释放哪些
  10. vim使用:全局搜索并跳转
  11. edge/chrome更新113版本后页面崩溃 STATUS_STACK_BUFFER_OVERRUN解决方案
  12. java 判断字符串重排后是否等于另一个字符串,包括空格符
  13. 钉钉企业内部开发报错notInDingTalk
  14. html5游戏视频UI框架,推荐几个精致的web UI框架
  15. uniapp引入使用pixi.js遇到的坑
  16. 电驱动机电一体化仿真
  17. 欧美简约商务PPT模板
  18. 985研究生入职电网6个月,晒出收入,还以为看错了,kafka实战pdf
  19. 数据库MySQL(一) 常用查询语句
  20. skynet源码分析之定时器skynet_timer.c

热门文章

  1. 工作中邮件回复10大注意事项
  2. jsp实现新浪微博登录
  3. MT6739,MT6762 MTK Browser打开网页预加载时,界面闪屏
  4. CSS rem是什么
  5. 冰与火之歌权力的游戏第七季第一集里面的士兵插曲音乐
  6. 认知升维: 道、法、术、器、势
  7. 飞机3D轨迹绘制(经度-纬度-高度)
  8. 过期牛奶不舍得扔怎么办呢?发挥牛奶最后的剩余价值吧!
  9. 计算机技术的过去现在和未来,白皮书 | 计算机视觉的过去,现在和未来
  10. NCE loss详解