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.pswp.cn/news/532045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532045.shtml
英文地址,請注明出處:http://en.pswp.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…