1.下载对应版本的python mysql 模块 我的是:pymssql-2.2.0.dev0-cp36-cp36m-win_amd64.whl

2.手动创建table

create table grilsbase
(
id int primary key auto_increment,
name varchar(50),height varchar(50),bwh varchar(50),title varchar(100),img_upload varchar(100),pc_img_upload varchar(100),
resource_id varchar(50),totals varchar(50),recommend_id varchar(50),date varchar(50),headimg_upload varchar(50),
show_datetime varchar(50),client_show_datetime varchar(50),video_duration varchar(50),free_select varchar(50),
trial_time varchar(50),viewtimes varchar(50),coop_customselect_654 varchar(50),coop_id varchar(50),tag_class varchar(50),
tag_name varchar(50),playerid varchar(50),block_detailid varchar(50),type varchar(50),istop varchar(50)
)

3.实现爬虫代码

导入模块:requests ,os,json,re,Mysqldb

流程:获取数据=>分析数据=>解析数据=>持久化保存

 #coding:utf-8
import requests
import os
import json
import re
import MySQLdb
import threading
#获取数据url
gilsUrl='http://act.vip.xunlei.com/ugirls/js/ugirlsdata.js'
gilsDetailUrl='http://meitu.xunlei.com/detail.html'
gilsImgUrl='http://data.meitu.xunlei.com/data/image/%s/%s'
executor = threading.BoundedSemaphore(10)
regex=re.compile('\/([^\/]*?\.jpg)$')
regexhead=re.compile('\/([^\/]*?)\.jpg$')
class MySQL:
def __init__(self,host,user,pwd,db):
self.host=host
self.user=user
self.db=db
self.pwd=pwd
def GetConnect(self):
if not self.db:
raise(NameError,'没有目标数据库')
self.connect=MySQLdb.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,port=3306,charset='utf8')
cur=self.connect.cursor()
if not cur:
raise(NameError,'数据库访问失败')
else:
return cur
def ExecSql(self,sql):
cur=self.GetConnect()
cur.execute(sql)
self.connect.commit()
self.connect.close()
def ExecQuery(self,sql):
cur=self.GetConnect()
cur.execute(sql)
resList = cur.fetchall()
self.connect.close()
return resList def getGirlsData():
regex=re.compile("var ugirlsData=(.+)")
r=requests.get(gilsUrl)
jsond=regex.findall(r.text)
with open('ugirlsdata.json','w+',encoding='utf-8') as f:
f.write(jsond[0])
#print('写入json成功')
return json.loads(jsond[0]) def getImgName(imgurl):
if(imgurl==''):
return ''
m=regex.findall(imgurl)
if m is None:
return ''
else:
return m[0] if len(m)>0 else '' def getImgNameHead(imgurl):
if(imgurl==''):
return ''
m=regexhead.findall(imgurl)
if m is None:
return ''
else:
return m[0] if len(m)>0 else '' def WriteDB(jsdata):
ms = MySQL(host="192.168.0.108", user="lin", pwd="", db="grils")
for data in jsdata:
sql="insert into grilsbase(\
name,height,bwh,title,img_upload,pc_img_upload,resource_id,totals,recommend_id,\
date,headimg_upload,show_datetime,client_show_datetime,video_duration,free_select,trial_time,\
viewtimes,coop_customselect_654,coop_id,tag_class,tag_name,playerid,block_detailid,type,istop)\
values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" % \
(data['name'],data['height'],data['bwh'],data['title'],getImgName(data.get('img_upload','')),data['pc_img_upload'],data['resource_id'],data["totals"],data["recommend_id"], \
data['date'],getImgName(data.get("headimg_upload",'')),data["show_datetime"],data["client_show_datetime"],data["video_duration"],data["free_select"],data["trial_time"], \
data['viewtimes'],data['coop_customselect_654'],data['coop_id'],data.get('tag_class',''),data.get('tag_name',''),data.get('playerid',''),data['block_detailid'],data['type'],data['istop'])
#print(sql)
ms.ExecSql(sql)
print('完成'+data['name']+'数据更新...')
DownImg(data['name'],data["totals"],data['resource_id'],data["headimg_upload"],data["img_upload"]) def DownImg(name,totals,resource_id,headimg_upload,img_upload):
path=creatFile(resource_id)
if headimg_upload.strip()!='':
#os.remove('./pic/'+resource_id+'/'+getImgName(headimg_upload)+'.jpg')
DownImgRun(headimg_upload,path,getImgNameHead(headimg_upload))
if img_upload.strip()!='':
#os.remove('./pic/'+resource_id+'/'+getImgName(img_upload)+'.jpg')
DownImgRun(img_upload,path,getImgNameHead(img_upload))
#print('正在下载'+name+'图片') for i in range(1,int(totals)+1):
url=gilsImgUrl%(resource_id,str(i)+'.jpg')
DownImgRun(url,path,i)
#t=threading.Thread(target=DownImgRun,args={url,path,i})
#t.start()
#t.join() def DownImgRun(url,path,i):
#print(url) r=requests.get(url)
if(r.status_code==200):
with open(path+'/'+str(i)+'.jpg','wb') as fimg:
fimg.write(r.content) def creatFile(dirname):
path='./pic/'+dirname
if os.path.exists(path):
return path
else:
os.makedirs(path)
return path if __name__ == '__main__':
gri=getGirlsData()
WriteDB(gri)

4.运行效果 和结果

Python3.6爬虫+Djiago2.0+Mysql --数据爬取的更多相关文章

  1. sulin Python3.6爬虫+Djiago2.0+Mysql --实例demo

    1.切换到项目目录下,启动测试服务器 manage.py runserver 192.168.0.108:8888 2.设置相关配置 项目目录展示如下: beauty=>settings.py ...

  2. Python3.6爬虫+Djiago2.0+Mysql --运行djiago环境

    1.安装djiago 模块 pip install Django  --默认安装最新的  安装完成以后可以python -m pip list 查看模块是否安装 2.创建项目及app 及生成目录 备注 ...

  3. [Python3网络爬虫开发实战] 6-Ajax数据爬取

    有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有.这是因为requests获取的都是 ...

  4. python爬虫-上期所持仓排名数据爬取

    摘要:笔记记录爬取上期所持仓数据的过程,本次爬取使用的工具是python,使用的IDE是pycharm 一.查看网页属性,分析数据结构 在浏览器中打开上期所网页,按F12或者选择表格文字-右键-审查元 ...

  5. 前端反爬虫策略--font-face 猫眼数据爬取

      1 .font-face定义了字符集,通过unicode去印射展示. 2 .font-face加载网络字体,我么可以自己创建一套字体,然后自定义一套字符映射关系表例如设置0xefab是映射字符1, ...

  6. python-day7爬虫基础之Ajax数据爬取

    前几天一直在忙老师的项目,就没有继续学python,也没有写什么收获,今天晚上有空看看书,边看边理解着写吧: 首先说一下,我对Ajax的理解,就是有时候我们在浏览某个网页的时候,只要我们鼠标一直往下滑 ...

  7. python3编写网络爬虫13-Ajax数据爬取

    一.Ajax数据爬取 1. 简介:Ajax 全称Asynchronous JavaScript and XML 异步的Javascript和XML. 它不是一门编程语言,而是利用JavaScript在 ...

  8. python3下scrapy爬虫(第八卷:循环爬取网页多页数据)

    之前我们做的数据爬取都是单页的现在我们来讲讲多页的 一般方式有两种目标URL循环抓取 另一种在主页连接上找规律,现在我用的案例网址就是 通过点击下一页的方式获取多页资源 话不多说全在代码里(因为刚才写 ...

  9. Python爬虫入门教程 3-100 美空网数据爬取

    美空网数据----简介 从今天开始,我们尝试用2篇博客的内容量,搞定一个网站叫做"美空网"网址为:http://www.moko.cc/, 这个网站我分析了一下,我们要爬取的图片在 ...

随机推荐

  1. XDTIC2019招新笔试题 + 官方解答

    腾讯创新俱乐部2019年招新笔试试题   [1] 小宗学长正在努力学习数论,他写下了一个奇怪的算式: \[ 2019^{2018^{2017^{\dots^{2^1}}}} \] 算式的结果一定很大, ...

  2. Ubuntu下怎么退出vim编辑器

    vim其实就是vi的升级版,vi里的所有命令vim里都可以用,一般使用来说几乎没什么差别. 写在前面:进入vim编辑器之后无法退出并保存,可以尝试给要编辑的文件sudo权限(例如:sudo vim / ...

  3. MySQL基本命令脚本

    一.基本命令 1.启动服务 说明:以管理员身份运行cmd 格式:net start 服务名称 示例:net start mysql57 2.停止服务 说明:以管理员身份运行cmd 格式:net sto ...

  4. ps -aux|grep mysql时候报错:Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

    ps -aux|grep mysql时候报错:Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ ...

  5. [JZOJ2866] 【集训队互测 2012】Bomb

    题目 题目大意 给你一个有\(n\)个点的平面. 选择三个点,求两两之间曼哈顿距离和的最大值和最小值. 思考历程&正解 比赛的时候没有想太多,但感觉似乎比较水-- 首先有个很显然的性质,答案为 ...

  6. C++调用python(C++)

    C++源代码:python部分就是正常的python代码 #include <string.h> #include <math.h> #include "iostre ...

  7. Windows 虚拟机 VM

    VMware是全球台式电脑及资料中心虚拟化解决方案的领导厂商.VMWare Workstation是该公司出品的“虚拟 PC”软件(即:大家常说的“虚拟机”),通过它可在一台电脑上同时运行更多的Mic ...

  8. SpringBoot_03_SpringBoot对其他技术的整合

    1.SpringBoot整合Mybatis 1.2 添加Mybatis的起步依赖 <!--mybatis起步依赖--> <dependency> <groupId> ...

  9. hdu多校第一场 1013(hdu6590)Code 凸包交

    题意: 给定一组(x1,x2,y),其中y为1或0,问是否有一组(w1,w2,b),使得上述的每一个(x1,x2,y)都满足x1*w1+x2*w2+b在y=1时大于0,在y=-1时小于0. 题解: 赛 ...

  10. php数据结构课程---7、队列实战

    php数据结构课程---7.队列实战 一.总结 一句话总结: 注意条件:注意循环的条件(比如while循环打印队列元素时),注意if的条件 把问题想清楚:比如链表操作初次插入元素和后面再插,效果是不一 ...