python爬蟲(牛客網的實習信息爬取)

數據庫

關於數據庫的下載和安裝配置,網上有很多教程。我用的是win10系統,如果有一樣的,建議在win10系統安裝好mysql後配置一樣環境變量。(關於如何配置可以去搜教程)。 這樣就可以打開命令行直接輸入 “mysql -u root -p” 訪問。
下面列出幾個命令,詳細的mysql命令可去查資料。

  1. show databases; # 查看數據庫
  2. use database_name; # 選擇數據庫
  3. desc table_name; # 查看錶格的結構
  4. select * from table_name #查看錶格數據
  5. 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中直接操作完成。但本次我就直接在命令行裏面輸入代碼建表:
mysql

將爬到的數據插入數據庫

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()

最後我們在數據庫中查看爬到的信息,就可以看到我們想要數據已經爬到了。
mysql

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章