5分で智聯招聘サイトを把握してモンゴDBデータベースに保存する
15628 ワード
前言
今回のテーマは2つの文章に分けて紹介します.一、データ収集 二、データ分析 第1編では、pythonでWebサイトのデータを抽出するデータ収集について説明します.
1環境とpythonライブラリの実行
まず、実行環境について説明します. python3.5 windows 7,64ビットシステム pythonライブラリ
今回の智聯招聘のウェブサイトは、主に以下のpythonライブラリに関連しています. requests BeautifulSoup multiprocessing pymongo itertools
2爬取の主な手順キーワード、都市、およびページ番号に基づいて、登る必要があるページリンク を生成する. requestsで対応するウェブページコンテンツを取得する BeautifulSoupで解析し、必要なキー情報 を取得する.這い出した情報をMongoDBデータベースに格納、新規レコードを挿入または更新する . multiprocessingでマルチプロセスを起動し、実行効率を向上させる .
3ファイル構成情報プロファイル「zhilian_kw_config.py」 爬虫類メイン実行ファイル「zhilian_kw_spider.py」 プロファイルにロールアップする情報を設定し、メインプログラムを実行してコンテンツをキャプチャします.
プロファイル「zhilian_kw_config.py」の内容は次のとおりです.
爬虫類マスター実行ファイル「zhilian_kw_spider.py」の内容は以下の通りです.
もっと素晴らしい内容は、微信の公衆番号に注目してください.
「Pythonデータの道」
転載先:https://www.cnblogs.com/lemonbit/p/6886641.html
今回のテーマは2つの文章に分けて紹介します.
1環境とpythonライブラリの実行
まず、実行環境について説明します.
今回の智聯招聘のウェブサイトは、主に以下のpythonライブラリに関連しています.
2爬取の主な手順
3ファイル構成
プロファイル「zhilian_kw_config.py」の内容は次のとおりです.
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON"
TOTAL_PAGE_NUMBER = 90 # PAGE_NUMBER: total number of pages,
KEYWORDS = [' ', 'python', ' '] #
#
ADDRESS = [' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ']
MONGO_URI = 'localhost'
MONGO_DB = 'zhilian'
爬虫類マスター実行ファイル「zhilian_kw_spider.py」の内容は以下の通りです.
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON"
from datetime import datetime
from urllib.parse import urlencode
from multiprocessing import Pool
import requests
from bs4 import BeautifulSoup
import pymongo
from zhilian.zhilian_kw_config import *
import time
from itertools import product
client = pymongo.MongoClient(MONGO_URI)
db = client[MONGO_DB]
def download(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}
response = requests.get(url, headers=headers)
return response.text
def get_content(html):
#
date = datetime.now().date()
date = datetime.strftime(date, '%Y-%m-%d') # str
soup = BeautifulSoup(html, 'lxml')
body = soup.body
data_main = body.find('div', {'class': 'newlist_list_content'})
if data_main:
tables = data_main.find_all('table')
for i, table_info in enumerate(tables):
if i == 0:
continue
tds = table_info.find('tr').find_all('td')
zwmc = tds[0].find('a').get_text() #
zw_link = tds[0].find('a').get('href') #
fkl = tds[1].find('span').get_text() #
gsmc = tds[2].find('a').get_text() #
zwyx = tds[3].get_text() #
gzdd = tds[4].get_text() #
gbsj = tds[5].find('span').get_text() #
tr_brief = table_info.find('tr', {'class': 'newlist_tr_detail'})
#
brief = tr_brief.find('li', {'class': 'newlist_deatil_last'}).get_text()
#
yield {'zwmc': zwmc, #
'fkl': fkl, #
'gsmc': gsmc, #
'zwyx': zwyx, #
'gzdd': gzdd, #
'gbsj': gbsj, #
'brief': brief, #
'zw_link': zw_link, #
'save_date': date #
}
def main(args):
basic_url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?'
for keyword in KEYWORDS:
mongo_table = db[keyword]
paras = {'jl': args[0],
'kw': keyword,
'p': args[1] # X
}
url = basic_url + urlencode(paras)
# print(url)
html = download(url)
# print(html)
if html:
data = get_content(html)
for item in data:
if mongo_table.update({'zw_link': item['zw_link']}, {'$set': item}, True):
print(' :', item)
if __name__ == '__main__':
start = time.time()
number_list = list(range(TOTAL_PAGE_NUMBER))
args = product(ADDRESS, number_list)
pool = Pool()
pool.map(main, args) #
end = time.time()
print('Finished, task runs %s seconds.' % (end - start))
もっと素晴らしい内容は、微信の公衆番号に注目してください.
「Pythonデータの道」
転載先:https://www.cnblogs.com/lemonbit/p/6886641.html