數據庫
關於數據庫的下載和安裝配置,網上有很多教程。我用的是win10系統,如果有一樣的,建議在win10系統安裝好mysql後配置一樣環境變量。(關於如何配置可以去搜教程)。 這樣就可以打開命令行直接輸入 “mysql -u root -p” 訪問。
下面列出幾個命令,詳細的mysql命令可去查資料。
- show databases; # 查看數據庫
- use database_name; # 選擇數據庫
- desc table_name; # 查看錶格的結構
- select * from table_name #查看錶格數據
- select * from table_name limit 9 # 查看錶格數據並限制數量
…
所謂關係型數據庫,數據庫的各個表格之間其實是可以建立某種關係。
python操作數據庫
不管是python還是java都提供了庫幫助你建立python或者是java代碼到mysql代碼的這樣一個連接。
這些網上都有很多的教程。Java中一般使用JDBC包。
python中我這次用的是pymsql。
python爬蟲並保存到數據庫
爬取牛客網實習信息
本次我想以爬取牛客網實習信息中在北京的後臺崗位。代碼如下:
import time
import requests
from bs4 import BeautifulSoup
url_lianjia = 'https://www.nowcoder.com/job/center?city={}&page={}'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/65.0.3325.181 Safari/537.36"}
def get_job(address, url_lianjia,headers,pageindex):
url_lianjia = url_lianjia.format(address, pageindex)
time.sleep(3)
# requests提供兩種獲取方式,一種是get,一種是post,對應於Http協議的兩種請求方式。
html = requests.get(url_lianjia, headers=headers)
#html = requests.post(url_lianjia, headers=headers)
soup = BeautifulSoup(html.content, 'lxml')
link_li = soup.find_all('li',class_="clearfix")
for li in link_li:
job_name = str(li.select('a')[1].string)
if ("後臺" in job_name) or ("Java" in job_name) or ("後端" in job_name):
company_name = str(li.select('div')[3].string)
pay = str(li.select('span')[1].text)
print(company_name, job_name, pay)
data = (company_name, job_name, pay)
putin_db(data)
# 爬取10頁的數據
for i in range(10):
get_job("北京", url_lianjia, headers, i+1)
mysql中創建數據庫和表
這一步其實也可在python中直接操作完成。但本次我就直接在命令行裏面輸入代碼建表:
將爬到的數據插入數據庫
import pymysql.cursors
# 連接數據庫
connect = pymysql.Connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='042566',
db='JOB_INFO',
charset='utf8'
)
# 獲取遊標
cursor = connect.cursor()
def putin_db(data):
sql = "INSERT INTO job_info (company_name, job_name, pay) VALUES ( '%s', '%s', '%s')"
cursor.execute(sql % data)
connect.commit()
print('成功插入', cursor.rowcount, '條數據')
# 關閉連接
cursor.close()
connect.close()
最後我們在數據庫中查看爬到的信息,就可以看到我們想要數據已經爬到了。