啟動MySQL的爬取代碼功能。
創(chuàng)新互聯(lián)專注于貢山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供貢山營銷型網(wǎng)站建設(shè),貢山網(wǎng)站制作、貢山網(wǎng)頁設(shè)計、貢山網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造貢山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供貢山網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1、IDEA想要爬取咸魚數(shù)據(jù)存儲到MYSQL里面,首先打開任務(wù)管理器開啟MySQL服務(wù)。
2、打開后連接到數(shù)據(jù)庫,建表打上勾,防止運行會報錯,即可爬取。
python爬取數(shù)據(jù)后儲存數(shù)據(jù)到mysql數(shù)據(jù)庫后添加新數(shù)據(jù)覆蓋舊。
1、先根據(jù)PRIMARY_KEY或UNIQUE字段查詢庫里是否存在數(shù)據(jù)(select)。
2、如果存在數(shù)據(jù),則更改許要更改的字段(update)。
3、如果不粗在數(shù)據(jù),則進行添加新數(shù)據(jù)(insert)。
Scrapy依賴于twisted,所以如果Scrapy能用,twisted肯定是已經(jīng)安裝好了。
抓取到的數(shù)據(jù),可以直接丟到MySQL,也可以用Django的ORM模型丟到MySQL,方便Django調(diào)用。方法也很簡單,按數(shù)據(jù)庫的語句來寫就行了,在spiders目錄里定義自己的爬蟲時也可以寫進去。
當(dāng)然使用pipelines.py是更通用的方法,以后修改也更加方便。你的情況,應(yīng)該是沒有在Settings.py里定義pipelines,所以Scrapy不會去執(zhí)行,就不會生成pyc文件了。
下載mysql.connector庫
然后把爬蟲爬到的數(shù)據(jù)通過mysql里面的insert語句查到數(shù)據(jù)庫,當(dāng)然也可以建表,一般我沒用python建表 是先建好再寫數(shù)據(jù)的
import?mysql.connector
conn?=?mysql.connector.connect(
user='root',
password='root',
host='127.0.0.1',
port='3306',
database='test_demo'
)
cursor?=?conn.cursor()
cursor.execute("INSERT?INTO?test_user(`uuid`,`user_name`,`user_level`)?VALUES?(%s,%s,%s)",[id,?user_name,?user_level])
cursor.execute("INSERT?INTO?tieba_user_detail(`user_name`,`user_exp`,`user_sex`,`tieba_age`,`tieba_note`,`user_favorites`,`user_fans`)?VALUES?(%s,%s,%s,%s,%s,%s,%s)",[user_name,user_exp,user_sex,?tieba_age,tieba_note,?user_favorites,?user_fans])
print('**************?%s??%s?數(shù)據(jù)保存成功?**************'%(user_rank,user_name))
conn.commit()
cursor.close()
插進入就這樣的
顯然不能直接儲存,你還得解析出自己需要的內(nèi)容。
比如我爬取某新聞網(wǎng)今日的國內(nèi)新聞,那么我創(chuàng)建一個實體類,里面有屬性:新聞標(biāo)題,新聞時間,正文等等。解析出你需要的內(nèi)容,封到實體里面,然后在dao層直接save到數(shù)據(jù)庫即可
如果你爬下的是整個網(wǎng)頁,這個好辦,把它當(dāng)做文件一樣,用流操作保存到電腦上即可。當(dāng)然保存網(wǎng)頁會遇到編碼問題,這個很棘手。
pymysql 基本使用 八個步驟以及案例分析
一.導(dǎo)入pymysql模塊
導(dǎo)入pymysql之前需要先安裝pymysql模塊
方法一:直接在pycharm編譯器里面輸入 pip install pymysql
方法二:win+r -- 輸入cmd --在里面輸入pip install pymysql
ps:在cmd中輸入pip list后回車 可以找到安裝的pymysql就表示安裝成功了
1
2
3
4
5
6
1
2
3
4
5
6
在pycharm編譯器中導(dǎo)入
import pymysql
1
2
1
2
二.獲取到database的鏈接對象
coon = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='pymysql_test')
1
1
user:是你的數(shù)據(jù)庫用戶名
password:數(shù)據(jù)庫密碼
database:你已經(jīng)創(chuàng)建好的數(shù)據(jù)庫
1
2
3
1
2
3
三.創(chuàng)建數(shù)據(jù)表的方法
cursor.execute(
'''create table if not exists pets(id int primary key auto_increment,
src varchar(50),
skill varchar(100)''')
1
2
3
4
1
2
3
4
四.獲取執(zhí)行sql語句的光標(biāo)對象
cousor = coon.cousor()
1
1
五.定義要執(zhí)行的sql語句
1.sql的增加數(shù)據(jù)的方法
sql = '''insert into test_mysql(id,src,skill) values(%d,%s,%s)'''
1
1
ps: test_mysql 是你連接到的數(shù)據(jù)庫中的一張表
id,src,skill 這個是你創(chuàng)建表時所定義的字段關(guān)鍵字
%d,%s,%s 這個要根據(jù)你創(chuàng)建的字段關(guān)鍵字的類型而定,記住要一一對應(yīng)
1
2
3
1
2
3
2.sql的刪除數(shù)據(jù)的方法
sql_1 = '''delete from test_mysql where src=%s;'''
1
1
3.sql的修改數(shù)據(jù)方法
sql_2 = '''update test_mysql set src=%s where skill=%s;'
1
1
4.sql的查詢方法
sql_3 = '''select * from test_mysql where skill = %s'''
1
1
六.通過光標(biāo)對象執(zhí)行sql語句
1.執(zhí)行增加數(shù)據(jù)的sql語句
cousor.execute(sql, [2, '', '000000'])
運行后在mysql的可視化后臺就可以直觀的添加的數(shù)據(jù)
1
2
1
2
2.執(zhí)行刪除數(shù)據(jù)sql語句
new = ''
cousor.execute(sql_1, [new])
PS:這里就是根據(jù)sql語句where后面的條件進行刪除對應(yīng)的數(shù)據(jù)
要記住傳入的數(shù)據(jù)要與sql的where后面條件匹配
1
2
3
4
1
2
3
4
3.執(zhí)行修改數(shù)據(jù)的sql語句
url = ''
pwd = '666666'
cousor.execute(sql_2,[pwd,url])
1
2
3
1
2
3
4.執(zhí)行查詢數(shù)據(jù)的sql語句
result1 = cousor.fetchone()
fetchone() 查詢=整個表中的第一條數(shù)據(jù),
如果再次使用就會查找到第二條數(shù)據(jù),
還可以在括號內(nèi)輸入id值查詢到相應(yīng)的數(shù)據(jù)
result2 = cousor.fetchmany()
fetchmany()查詢到表里的多條數(shù)據(jù),
在括號里輸入幾就會查找到表的前幾條數(shù)據(jù)
result2 = cousor.fetchall()
fetchall()查詢到sql查詢匹配到的所有數(shù)據(jù)
print(result)
用print輸出語句就能直接打印輸出所查詢到的數(shù)據(jù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
**總結(jié): 在執(zhí)行sql語句要傳入?yún)?shù)時,這個參數(shù)要以列表或者元組的類型傳入**
1
1
七.關(guān)閉光標(biāo)對象
cousor.close()
1
1
八.關(guān)閉數(shù)據(jù)庫的鏈接對象
coon.cousor()
1
1
九.洛克王國寵物數(shù)據(jù)抓取案例
import requests
import pymysql
from lxml import etree
from time import sleep
# 數(shù)據(jù)庫鏈接
conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='pymysql')
cursor = conn.cursor()
# 執(zhí)行一條創(chuàng)建表的操作
cursor.execute(
'''create table if not exists pets(id int primary key auto_increment,name varchar(50),src varchar(100),industry text)''')
url = ''
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
response.encoding = 'gbk'
html = response.text
# print(html)
# 寵物名稱
# 寵物圖片(圖片在 lz_src)
# 寵物技能(跳轉(zhuǎn)詳細頁)
tree = etree.HTML(html)
li_list = tree.xpath('//ul[@id="cwdz_list"]/li') # 所有的寵物
for li in li_list:
name = li.xpath('./@name')[0] # 每一個寵物的名稱
src = 'http:' + li.xpath('./a/img/@lz_src')[0] # 圖片鏈接
link = '' + li.xpath('./a/@href')[0] # 寵物的詳細鏈接
industry = [] # 數(shù)組里面存放每一個對象,每一個對象就是一個技能
# 對詳細鏈接發(fā)起請求,獲取技能
try:
detail_resp = requests.get(url=link, headers=headers)
sleep(0.5)
detail_resp.encoding = 'gbk'
detail_tree = etree.HTML(detail_resp.text)
# 技能
skills = detail_tree.xpath('/html/body/div[5]/div[2]/div[2]/div[1]/div[1]/table[4]/tbody/tr')
del skills[0]
del skills[0]
for skill in skills:
item = {}
item['name'] = skill.xpath('./td[1]/text()')[0] # 技能
item['grade'] = skill.xpath('./td[2]/text()')[0] # 等級
item['property'] = skill.xpath('./td[3]/text()')[0] # 屬性
item['type'] = skill.xpath('./td[4]/text()')[0] # 類型
item['target'] = skill.xpath('./td[5]/text()')[0] # 目標(biāo)
item['power'] = skill.xpath('./td[6]/text()')[0] # 威力
item['pp'] = skill.xpath('./td[7]/text()')[0] # pp
item['result'] = skill.xpath('./td[8]/text()')[0] # 效果
industry.append(item)
# print(industry)
# 數(shù)據(jù)保存 (mysql)
sql = '''insert into pets(name,src,industry) values (%s,%s,%s);'''
cursor.execute(sql, [name, src, str(industry)])
conn.commit()
print(f'{name}--保存成功!')
except Exception as e:
pass
cursor.close()
conn.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
十.總結(jié)
本章內(nèi)容主要是給大家講解一下在爬蟲過程中如何將數(shù)據(jù)保存mysql數(shù)據(jù)庫中去,
最后面這個案例就是一個示范,希望這篇文章能給大家?guī)韼椭?都看到這里了給
個三連支持一下吧!!!
1
2
3
1
2
3