python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb

爬取的内容为百度招聘页面下的python 杭州地区

所要爬取的内容

python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb_第1张图片

一共爬取的是6个字段
1 招聘岗位 2 招聘城市 3 招聘公司 4 招聘薪资 5 招聘日期 6 招聘来源网站

用的是selenium + beautifulsoup + mongodb + re 模块进行爬取的内容

总体上难度不是很大,内容清除也不是很完整,记不住的或者没有记牢固的一边百度,一边加深印象。总体来说还是爬取出来了了

问题总结: 不知道是不是多进程结合selenium 爬取是不是不行,然后试着用了,我也不知道里面的原理是怎么回事,这次是自己初次入门,能力还是不足,mongodb使用的时候也不知道为什么开启了服务,但是插入数据老是插不进去,可能是被锁住了,但是删除锁之后还是会出现问题,也不知道后来问题是怎么解决的,也就那样好的吧。


在使用selenium 跳转到下一页的时候,根据get_element_byxpath(xxx) 里面的id 会根据页面的变化而变化的。如下图,可以自己亲测一下

python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb_第2张图片

总的值有1,2,3 昨晚弄的也是有点急什么的,不过最后爬取出来

看下爬取成果,总共586条,确实对应上了第一张图片上的586,
没有重复度。
python3 [爬虫入门实战] 爬虫之使用selenium 爬取百度招聘内容并存mongodb_第3张图片


最后贴上源代码:

# encoding=utf8
import re
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

from bs4 import BeautifulSoup

import pymongo

# 多进程
from multiprocessing import Pool

# 1 打开数据库连接,mongodb默认端口为27017
conn = pymongo.MongoClient(host='localhost',port=27017)
# 2 选择或创建数据库
jobdata = conn['baidujobs']
# 3 选择或创建数据集合
ver_job = jobdata['verjob']

baidu_baseurl = 'http://zhaopin.baidu.com/quanzhi?tid=4139&ie=utf8&oe=utf8&query=python%E6%9D%AD%E5%B7%9E&city_sug=%E6%9D%AD%E5%B7%9E'
def set_winscroll(driver):
    time.sleep(2)
    driver.execute_script('window.scrollBy(0,2000)')
    time.sleep(3)
    driver.execute_script('window.scrollBy(0,3000)')
    time.sleep(3)


# 1 初始化driver
driver = webdriver.PhantomJS()
# 2 调用get方法
driver.get(baidu_baseurl)
# 3 进入网页
set_winscroll(driver)

# 4 获取资源(第一页的数据)
we_data = driver.page_source
# print('first_we_data ' + we_data)


def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    item_url = soup.findAll('a', {'class': 'clearfix item line-bottom'})
    # for item in zip(item_url):
    #     print(item.get('href'))

    # 职位信息
    jobs = soup.findAll('div', {'class': 'title-h3 line-clamp1'})
    # for job in jobs:
    # print(job.string) # 职位信息
    # 地址 + 公司名
    compy = soup.findAll('p', {'class': 'area line-clamp1'})
    # for com in compy:
    #     print(com.string)

    # 薪资
    salarys = soup.findAll('p', {'class': 'salary'})
    # for salary in salarys:
    #     print(salary.string)
    # 发布时间跟发布来源网站
    addresss = soup.findAll('div', {'class': 'right time'})
    # print(addresss)
    reg = r'

(.*?)

'
regx = re.compile(reg) ads = re.findall(regx, str(addresss)) # print(ads) # for adds in ads: # data = adds.split('|') # print(data) for itm_url, job_detail, ver_compny, ver_salary, ver_addres in zip(item_url, jobs, compy, salarys, ads): data = { 'itme_url': 'http://zhaopin.baidu.com'+itm_url.get('href'), 'job_detail': job_detail.string, 'ver_compny': str(ver_compny.string), 'ver_salary': ver_salary.string, 'ver_addres': str(ver_addres).split('|'), } print(data) # 插入数据库 ver_job.insert_one(data) # 插入数据库失败 f.write(str(data)) def get_page_source(page_num): time.sleep(2) driver.find_element_by_xpath('//*[@id="pagination"]/p/span/a[%s]' % page_num).click() # //*[@id="pagination"]/p/span/a[1] 为在第一页的按钮 # //*[@id="pagination"]/p/span/a[2] 为第二页的按钮 set_winscroll(driver) we_data = driver.page_source return we_data f = open('百度招聘前30页杭州.txt', 'a',encoding='utf-8') # 首页的数据 def getBaiduHangZhouJob(we_data): parse_html(we_data) for i in range(1, 50): if i==1: we_data = get_page_source(1) parse_html(we_data) elif i<=5: we_data = get_page_source(str(2)) parse_html(we_data) else: we_data = get_page_source(str(3)) parse_html(we_data) f.close() if __name__ == '__main__': getBaiduHangZhouJob(we_data) # pool = Pool(processes=10) # pool.map_async(getBaiduHangZhouJob(we_data)) # pool.close() # f.close()

这里也使用了存入道txt文件中的方法,两个方法都有用到。

这次是第二次自己单独做练习selenium + mongodb

对于分布式爬虫scraper框架,需要进行开始的学习了,一开始对mongodb , selenium 也是有抵触,惧怕心理,不过下来之后却也是差不多的感觉,这次是入门了吧。慢慢的了解,熟悉,练习,回头过来你会发现也就是那么回事,加油

下次, scraper分布式爬虫的练习 ,对于python开发岗位,自己也要学会Django的学习开发,路子还有很长,需要自己静下心来摸索。

你可能感兴趣的:(#,python3爬虫,我的python3爬虫之路)