1. 使用的工具
selenium+xpath+ 手动输入登录
2. 实现的功能:
1.手动登录后,按终端提示,就能下载所需要的内容
import requests
import json
import time
import random
from lxml import etree
from concurrent.futures import ThreadPoolExecutor
from selenium import webdriver
import pymongo
client = pymongo.MongoClient()
db = client.lougou
collention =db.lou
url ='https://www.lagou.com/'
bro = webdriver.Chrome()
bro.get(url)
input('在登录页面手动登录后,按回车键:')
search_input = bro.find_element_by_id('search_input')
search_button = bro.find_element_by_id('search_button')
search_msg = input('请输入你要搜索的职位:')
search_input.send_keys(search_msg)
search_button.click()
def get_data():
'''
提取页面数据
将数据存入 mongo 数据库
'''
time.sleep(1)
# 获取页面内容
page=bro.page\_source
time.sleep(2)
tree = etree.HTML(page)
li\_list =tree.xpath("//ul\[@class='item\_con\_list'\]/li")
for li in li\_list:
item={}
item\['title'\] =li.xpath('.//h3/text()')\[0\] # 职位标题
item\['position\_link'\] = li.xpath(".//a\[@class='position\_link'\]/@href")\[0\] # 职位详情链接
item\['addr'\] = li.xpath(".//span\[@class='add'\]/em/text()")\[0\].strip() # 公司区域
item\['money'\] = li.xpath(".//div\[@class='li\_b\_l'\]/span/text()")\[0\] # 岗位工资
item\['work\_year'\] = li.xpath(".//div\[@class='p\_bot'\]/div\[@class='li\_b\_l'\]//text()") #
item\['work\_year'\] = \[i.strip() for i in item\['work\_year'\] if i.strip()\]
item\['work\_year'\] =item\['work\_year'\]\[1\] # 工作经历
item\['company\_name'\] = li.xpath(".//div\[@class='company\_name'\]/a/text()")\[0\] # 公司名字
item\['industry'\] = li.xpath(".//div\[@class='industry'\]/text()")\[0\].strip() # 公司所属行业
print(item)
# 将数据存到MongoDB 中
collention.insert(item)
get_data()
while 1:
try:
# 下一页
next =bro.find\_element\_by\_xpath('//span\[@class="pager\_next "\]')
next.click()
get\_data()
except :
print('没有下一页了。。。。。')
break
while 1:
keyword\_input = bro.find\_element\_by\_id('keyword') # 搜索框
submit\_btn = bro.find\_element\_by\_id('submit') # 搜索按钮
# 清空输入搜索框的内容
keyword\_input.clear()
# 重新进行搜索
msg2 =input('请输入你要下载的职位信息:')
# 退出循环条件,退出下载
if msg2.upper()=='Q':
break
keyword\_input.send\_keys(msg2)
# 点击搜索
submit\_btn.click()
# 下载该页面的数据
get\_data()
while 1:
try:
# 下一页
next =bro.find\_element\_by\_xpath('//span\[@class="pager\_next "\]')
next.click()
# 进入下一页,进行下载该页的数据
get\_data()
except :
print('没有下一页了。。。。。')
break
client.close()
bro.quit()
代码
2. 你第一次输入的职位下载完会提醒你,你可以再次下载你所需要的其他职位的数据
3. 数据保存在了 mongo中,此处没有做扩展,存文件或其他数据库
手机扫一扫
移动阅读更方便
你可能感兴趣的文章