python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...

本文实例讲述了Python3实现的爬虫爬取数据并存入mysql数据库操作。分享给大家供大家参考,具体如下:

爬一个电脑客户端的订单。罗总推荐,抓包工具用的是HttpAnalyzerStdV7,与chrome自带的F12类似。客户端有接单大厅,罗列所有订单的简要信息。当单子被接了,就不存在了。我要做的是新出订单就爬取记录到我的数据库zyc里。

设置每10s爬一次。

抓包工具页面如图:

首先是爬虫,先找到数据存储的页面,再用正则爬出。

# -*- coding:utf-8 -*-

import re

import requests

import pymysql #Python3的mysql模块,Python2 是mysqldb

import datetime

import time

def GetResults():

requests.adapters.DEFAULT_RETRIES = 5 #有时候报错,我在网上找的不知道啥意思,好像也没用。

reg = [r'"id":(.*?),',

r'"order_no":"(.*?)",',

r'"order_title":"(.*?)",',

r'"publish_desc":"(.*?)",',

r'"game_area":"(.*?)\\/(.*?)\\/(.*?)",',

r'"order_current":"(.*?)",',

r'"order_content":"(.*?)",',

r'"order_hours":(.*?),',

r'"order_price":"(.*?)",',

r'"add_price":"(.*?)",',

r'"safe_money":"(.*?)",',

r'"speed_money":"(.*?)",',

r'"order_status_desc":"(.*?)",',

r'"order_lock_desc":"(.*?)",',

r'"cancel_type_desc":"(.*?)",',

r'"kf_status_desc":"(.*?)",',

r'"is_show_pwd":(.*?),',

r'"game_pwd":"(.*?)",',

r'"game_account":"(.*?)",',

r'"game_actor":"(.*?)",',

r'"left_hours":"(.*?)",',

r'"created_at":"(.*?)",',

r'"account_id":"(.*?)",',

r'"mobile":"(.*?)",',

r'"contact":"(.*?)",',

r'"qq":"(.*?)"},']

results=[]

try:

for l in range(1,2): #页码

proxy = {'HTTP':'61.135.155.82:443'} #代理ip

html = requests.get('https://www.dianjingbaozi.com/api/dailian/soldier/hall?access_token=3ef3abbea1f6cf16b2420eb962cf1c9a&dan_end=&dan_start=&game_id=2&kw=&order=price_desc&page=%d'%l+'&pagesize=30&price_end=0&price_start=0&server_code=000200000000&sign=ca19072ea0acb55a2ed2486d6ff6c5256c7a0773&timestamp=1511235791&type=public&type_id=%20HTTP/1.1',proxies=proxy) # 用get的方式访问。网页解码成中文。接单大厅页。

#

html=html.content.decode('utf-8')

outcome_reg_order_no = re.findall(r'"order_no":"(.*?)","game_area"', html) #获取订单编号,因为订单详情页url与订单编号有关。

for j in range(len(outcome_reg_order_no)):

html_order = requests.get('http://www.lpergame.com/api/dailian/order/detail?access_token=eb547a14bad97e1ee5d835b32cb83ff1&order_no=' +outcome_reg_order_no[j] + '&sign=c9b503c0e4e8786c2945dc0dca0fabfa1ca4a870&timestamp=1511146154 HTTP/1.1',proxies=proxy) #订单详细页

html_order=html_order.content.decode('utf-8')

# print(html_order)

outcome_reg = []

for i in range(len(reg)):#每条订单

outcome = re.findall(reg[i], html_order)

if i == 4:

for k in range(len(outcome)):

outcome_reg.extend(outcome[k])

else:

outcome_reg.extend(outcome)

results.append(outcome_reg) #结果集

return results

except:

time.sleep(5) #有时太频繁会报错。

print("失败")

pass

根据爬虫结果建表,这里变量名要准确。并且要设置唯一索引,使每次爬的只有新订单入库。

def mysql_create():

mysql_host = ''

mysql_db = 'zyc'

mysql_user = 'zyc'

mysql_password = ''

mysql_port = 3306

db = pymysql.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, db=mysql_db,charset='utf8') # 连接数据库编码注意是utf8,不然中文结果输出会乱码

sql_create = "CREATE TABLE DUMPLINGS (id CHAR(10),order_no CHAR(50),order_title VARCHAR(265),publish_desc VARCHAR(265),game_name VARCHAR(265),"\

"game_area VARCHAR(265),game_area_distinct VARCHAR(265),order_current VARCHAR(3908),order_content VARCHAR(3908),order_hours CHAR(10)," \

"order_price FLOAT(10),add_price FLOAT(10),safe_money FLOAT(10),speed_money FLOAT(10),order_status_desc VARCHAR(265),"\

"order_lock_desc VARCHAR(265),cancel_type_desc VARCHAR(265),kf_status_desc VARCHAR(265),is_show_pwd TINYINT,game_pwd CHAR(50),"\

"game_account VARCHAR(265),game_actor VARCHAR(265),left_hours VARCHAR(265),created_at VARCHAR(265),account_id CHAR(50),"\

"mobile VARCHAR(265),mobile2 VARCHAR(265),contact VARCHAR(265),contact2 VARCHAR(265),qq VARCHAR(265),"\

"PRIMARY KEY (`id`),UNIQUE KEY `no`(`order_no`))ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8"

sql_key="CREATE UNIQUE INDEX id ON DUMPLINGS(id)"

cursor = db.cursor()

cursor.execute("DROP TABLE IF EXISTS DUMPLINGS")

cursor.execute(sql_create)# 执行SQL语句

cursor.execute(sql_key)

db.close() # 关闭数据库连

把数据导入Mysql,注意编码和字段之间的匹配。

def IntoMysql(results):

mysql_host = ''

mysql_db = 'zyc'

mysql_user = 'zyc'

mysql_password = ''

mysql_port = 3306

db = pymysql.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, db=mysql_db,charset='utf8') # 连接数据库编码注意是utf8,不然中文结果输出会乱码

cursor = db.cursor()

for j in range(len(results)):

try:

sql = "INSERT INTO DUMPLINGS(id,order_no,order_title,publish_desc ,game_name," \

"game_area,game_area_distinct,order_current,order_content,order_hours," \

"order_price,add_price,safe_money,speed_money,order_status_desc," \

"order_lock_desc,cancel_type_desc,kf_status_desc,is_show_pwd,game_pwd," \

"game_account,game_actor,left_hours,created_at,account_id," \

"mobile,mobile2,contact,contact2,qq) VALUES ("

for i in range(len(results[j])):

sql = sql + "'" + results[j][i] + "',"

sql = sql[:-1] + ")"

sql = sql.encode('utf-8')

cursor.execute(sql)

db.commit()

except:pass

db.close()

每十秒运行一次。

mysql_create()

i=0

while True:

results = GetResults()

IntoMysql(results)

i=i+1

print("爬虫次数:",i)

time.sleep(10)

结果如图:

希望本文所述对大家Python程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中multiply函数_python中numpy库内multiply()、dot()和 * 三种乘法运算的区别小计...

首先,导入函数包:import numpy as np1.np.multiply()函数:数组:(点对点)对应位置元素相乘矩阵:对应位置元素相乘示例:A np.array([[1,2],[3,4]])B np.array([[1,3],[2,4]])A_mat np.mat(A)B_mat np.mat(B)A_B_mult…

安装python3.6.1_如何安装python3.6.1/

如何在win7下安装Python及配置1、首先,从搜索python官载适合自己电脑python版本。2标右击桌面“计算机”择打开菜单栏中的性”。3、WindowsXP时,在新弹出的属性窗口,选择“高级”->“环境变量”。Windows7是,在新弹出的属性窗口…

编程入门python java和c语言_学习编程适不适合从Python入门?哪种语言更适合入门?...

本文对比了C语言和Python语言,分析它们作为编程入门语言各自的利弊,并给出了我推荐的编程学习道路。我本身已经入门了Python脚本语言,在进阶C语言和JAVA语言后,Python重学就轻松很多,几个小时就拾起了忘记的语法&#…

mysql 备份 一张表_mysql 备份表的一个方法

#--- start# 新建表create table sp2_match_comment_tmp like sp2_match_comment; # 这种方式 外键索引,触发器不会在新表中有,要自己添加LOCK TABLES sp2_match_comment write, sp2_match_comment AS smc2 read, sp2_match_comment_tmp write;# 导出最新…

springmvc的工作原理_SpringMVC工作原理

1 简介SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Servlet接口。2 运行原理…

java逻辑运算符_Java逻辑运算符

Java逻辑运算符Java逻辑运算符包含下面6中符号:&& 与 ;&& 与 前后两个操作数必须都是true才返回true,否则返回false& 不短路与 ; & 不短路与 表达式都会执行到|| 或; || 或 只要两个操作数中有一个是tru…

跨站点请求伪造_十大常见web漏洞——跨站点请求伪造(CSRF)

CSRF介绍什么是CSRF呢?我们直接看例子。https://mp.toutiao.com/profile_v3/graphic/preview?dodelete&pgc_id6829574701128352260这个URL是头条删除pgc_id为6829574701128352260的一篇文章的连接,通过执行这个URL用户就可以删除这篇文章。首先攻击…

java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/*** Created with IntelliJ IDEA.* User: csx* Date: 4/24/14* Time: 9:56 AM* To change this template use File | Settings | File Templates.** 生产者与消费者模型中&#x…

unique函数_C++核心准则C.35:基类的析构函数必须满足的条件

C.35: A base class destructor should be either public and virtual, or protected and nonvirtual基类的析构函数要么是公开的虚函数,要么是保护的非虚函数Reason(原因)To prevent undefined behavior. If the destructor is public, then calling code can atte…

java jta 例子_Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)...

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子。请通过以下方式下载github源代码:本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库)&#xff0…

python连接redis哨兵_Python redis.sentinel方法代码示例

本文整理汇总了Python中redis.sentinel方法的典型用法代码示例。如果您正苦于以下问题:Python redis.sentinel方法的具体用法?Python redis.sentinel怎么用?Python redis.sentinel使用的例子?那么恭喜您, 这里精选的方法代码示例或…

交换两个数组 差最小 java_如何交换两个等长整形数组使其数组和的差最小(C和java实现)...

1 importjava.util.Arrays;23 /**4 *5 *authorAdministrator6 *7 */8 public classTestUtil {9 private int[] arrysMin null;1011 private int[] arrysMax null;1213 private int matchNum 0;1415 private boolean hasMatched false;1617 /**18 * 返回数组的所有元素的总和…

python 判断子序列_Leetcode练习(Python):第392题:判断子序列:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。...

题目&#xff1a;判断子序列&#xff1a;给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~ 500,000)&#xff0c;而 s 是个短字符串(长度 <100)。字符串的一个子序列是原始字符串删除一些(也可…

垂直串联六关节机器人调试手册_工业机器人有哪些应用你知道吗?

目前&#xff0c;工业机器人大部分集中于传统的焊接、喷涂等领域&#xff0c;我国工业机器人的核心部件和整机市场仍被国外垄断&#xff0c;工业机器人要面向整个智能制造市场&#xff0c;还需要具备应对整个智能制造过程中大多数工艺的能力&#xff0c;而工业互联网则是实现智…

flume avro java 发送数据_flume将数据发送到kafka、hdfs、hive、http、netcat等模式的使用总结...

1、source为http模式&#xff0c;sink为logger模式&#xff0c;将数据在控制台打印出来。conf配置文件如下&#xff1a;# Name the components on this agenta1.sources r1a1.sinks k1a1.channels c1# Describe/configure the sourcea1.sources.r1.type http #该设置表示接…

python三角函数拟合_使用python进行数据拟合最小化函数

这是我对这个问题的理解。首先&#xff0c;我通过以下代码生成一些数据import numpy as npfrom scipy.integrate import quadfrom random import randomdef boxmuller(x0,sigma):u1random()u2random()llnp.sqrt(-2*np.log(u1))z0ll*np.cos(2*np.pi*u2)z1ll*np.cos(2*np.pi*u2)r…

java url 本地文件是否存在_我的应用程序知道URL中是否存在文件会一直停止[重复]...

这个问题在这里已有答案&#xff1a;我试图写一个应用程序&#xff0c;如果在给定的URL中有一个文件&#xff0c;将字符串放在textview中&#xff0c;这是代码和崩溃信息&#xff0c;可能是什么错误&#xff1f;public class MainActivity extends AppCompatActivity {String u…

python枚举类的意义_用于ORM目的的python枚举类

编辑问题我正在尝试创建一个类工厂,它可以生成具有以下属性的枚举类&#xff1a;>从列表中初始化类允许值(即,它)自动生成&#xff01;).> Class创建自己的一个实例对于每个允许的值.>类不允许创建任何其他实例一旦上述步骤已完成(任何尝试这样做会导致异常).>类实…

java 生成校验验证码_java生成验证码并进行验证

一实现思路使用BufferedImage用于在内存中存储生成的验证码图片使用Graphics来进行验证码图片的绘制&#xff0c;并将绘制在图片上的验证码存放到session中用于后续验证最后通过ImageIO将生成的图片进行输出通过页面提交的验证码和存放在session中的验证码对比来进行校验二、生…

yy自动语音接待机器人_智能语音机器人落地产品有哪些?

据相关研究报告表明&#xff0c;在众多人工智能落地产品或者应用场景中&#xff0c;智能语音机器人无论从产品的成熟度还是应用的广泛度来说&#xff0c;都是人工智能行业最热门和最有前景的产品。智能语音机器人并不只是一款产品&#xff0c;它是所有智能语音系列产品的统称&a…