輕鬆利用Python爬蟲爬取你想要的資料

專注的阿熊發表於2021-09-10

import urllib.request

from bs4 import BeautifulSoup

import time

import pymysql

def headers_request(url):

     headers={

         'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'

}

     request=urllib.request.Request(url,headers=headers)

     return request

# 解析內容

def parse_content(content, db):

     # 生成 soup 物件

     soup = BeautifulSoup(content,'lxml')

     # 先找包含所有工作的 div

     odivbox = soup.find('div',id='resultList')

     # 首先找到包含所有工作的 div

     odiv_list = odivbox.find_all('div',class_='el')[1:]

     # print(len(odiv_list))

     for odiv in odiv_list:

         # 職位名稱

         jobname = odiv.select('.t1 > span > a')[0]['title']

         # 公司名稱

         company = odiv.select('.t2 > a')[0]['title']

         # 工作地點

         area = odiv.select('.t3')[0].string

         # 職位月薪

         salary = odiv.select('.t4')[0].string

         # 釋出時間

         publish_time = odiv.select('.t5')[0].string

         # print(salary, publish_time)

         # 儲存到字典中

         item = {

             ' 職位名稱 ':jobname,

             ' 公司名稱 ':company,

             ' 工作地點 ':area,

             ' 職位月薪 ':salary,

             ' 釋出時間 ':publish_time

         }

         # 儲存到檔案中

         # string = str(item) + '\n'

         # fp.write(string)

         # 儲存到 mysql

         save_to_mysql(db,item)

def save_to_mysql(db,item):

     # 獲取遊標

     cur = db.cursor()

     # 執行 sql 語句

     sql = """insert into work(jobname,company,area,salary,publish_time) values('%s','%s','%s','%s','%s')""" % (item[' 職位名稱 '], item[' 公司名稱 '], item[' 工作地點 '], item[' 職位月薪 '],外匯跟單gendan5.com item[' 釋出時間 '])

     # print(sql)

     try:

         cur.execute(sql)

         # 提交

         db.commit()

     except Exception as e:

         # print(e)

         # 錯誤回滾

         db.rollback()

def main():

     # fp = open('work.txt','w',encoding='utf8')

     # 連結資料庫

     db = pymysql.connect(host="xxxx",user="xxxx",password="xxxxxx",db="xx",port=xxxx,charset='utf8')

     # 使用者輸入要搜尋工作關鍵字

     keyword = input(' 請輸入要搜尋的關鍵字 -')

     # 使用者輸入要爬取的起始和結束頁碼

     start_page = int(input(' 請輸入要爬取的起始頁碼 -'))

     end_page = int(input(' 請輸入要爬取的結束頁碼 -'))

     # 要拼接的起始 url

     url = '{},2,{}.html'

     # 寫迴圈,每一頁開始挨著爬取

     for page in range(start_page,end_page + 1):

         print(' 正在爬取第 %s ......' % page)

         # 拼接 url

         url_page = url.format(keyword,page)

         # print(url_page)

         # 構建請求物件

         request = headers_request(url_page)

         # 傳送請求,得到響應

         content = urllib.request.urlopen(request).read().decode('gbk')

         # 解析內容

         parse_content(content,db)

         print(' 結束爬取第 %s ' % page)

         time.sleep(2)

     # fp.close()

     db.close()

if __name__ == '__main__':

     main()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2791528/,如需轉載,請註明出處,否則將追究法律責任。

相關文章