Python学习笔记,51job爬虫篇

Python学习笔记,数据分析(51job)

学习python已经有段时间了,现在整理整理自己学习的知识
本次分析的是51job中python岗位的初步分析
明确思路:
1.利用爬虫,获取数据
2.利用pandas,numpy进行数据清洗
3.利用pandas,numpy,matplotlib,jieba等库进行分析

爬虫篇:

1.爬虫编写:
思路:1.进行浏览器模拟;
2.连接数据库;
3.分析url,利用for循环构造出url;
4.分析网页信息,提取出数据;
5.存入数据库,并关闭数据库;
先上代码,是个小白,希望大家见谅,哈哈哈哈

import pymysql
import requests
import urllib.request
from lxml import etree
from bs4 import BeautifulSoup
#浏览器模拟
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0;win64;x64;rv62.0) Gecko/20100101 Firefox/62.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
#连接数据库
conn = pymysql.connect(host="127.0.0.1",user="root",passwd="lxw19961230",db="51job")
cursor = conn.cursor()
#构造网页

for i in range(0,805):
    url = "http://search.51job.com/list/000000,000000,0000,00,9,99,python,2,"+str(i)+".html"
    data = urllib.request.urlopen(url).read().decode("gbk").encode("utf-8")
    res=requests.get(url)
    res.encoding='gbk'
    #定义一个节点树的根
    data1=etree.HTML(res.text)
    bs = BeautifulSoup(data,"html.parser")
    #提取数据
    money = []
    cons = bs.find_all('div',{'class':'el'})
    for con in cons:
        con1 = con.find_all('span',{'class':'t4'})
        if con1 == []:
            continue
        mon = con1[0].string
        if mon is None:
            mon = "Null"
        if len(mon) == 2:
            continue
        money.append(mon)
    title = data1.xpath('//div[@class="el"]/p[@class="t1 "]/span/a/@title')
    adress = data1.xpath('//div[@class="el"]/span[@class="t3"]/text()')
    company = data1.xpath('//div[@class="el"]/span[@class="t2"]/a/@title')
    link = data1.xpath('//div[@class="el"]/span[@class="t2"]/a/@href')
    #money = data1.xpath('//div[@class="el"]/span[@class="t4"]/text()')
    datetime = data1.xpath('//div[@class="el"]/span[@class="t5"]/text()')
    
    #写入数据库
    for j in range(0,len(title)):
        sql = "insert into python_1 (title,adress,company,link,money,datetime) values('"+title[j]+"','"+adress[j]+"','"+company[j]+"','"+link[j]+"','"+money[j]+"','"+datetime[j]+"')"
        cursor.execute(sql)
        conn.commit()
        print(title[j])
        print(adress[j])
        print(company[j])
        print(link[j])
        print(money[j])
        print(datetime[j])

conn.close()

此次爬虫编写用的是requests+lxml,其实数据量还是比较大的,有4万+,效率有点低,大约要两小时。可以考虑用scrapy框架或者自己写一个多线程,提高一下效率。
代码分析:

data = urllib.request.urlopen(url).read().decode("gbk").encode("utf-8")

51job有编码问题,会出现乱码。以上代码可以解决问题。

bs = BeautifulSoup(data,"html.parser")
    #提取数据
    money = []
    cons = bs.find_all('div',{'class':'el'})
    for con in cons:
        con1 = con.find_all('span',{'class':'t4'})
        if con1 == []:
            continue
        mon = con1[0].string
        if mon is None:
            mon = "Null"
        if len(mon) == 2:
            continue
        money.append(mon)

在爬的过程中,会停止(没有编写异常处理),分析了一下他的网页信息,发现工资有时候是没有的,所有在爬的时候,遇到没有工资时,就填入Null。由于这个页面数据爬下了是存在一个列表中,所以在爬的过程中,可以使用BeautifulSoup和for循环来判断是否有数据。其他数据,利用xpath就行了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要爬取51job网站上的职位信息,你可以使用Python编写爬虫代码。以下是一个示例代码的概述: 1. 首先,你需要导入所需的库和模块。在示例代码中,我们使用了selenium库来模拟浏览器行为,以及其他一些常用的库,如requests和BeautifulSoup。 2. 接下来,你需要设置伪造的浏览器信息。这可以通过设置User-Agent标头来实现,以使请求看起来像是来自真实的浏览器。 3. 然后,你可以编写一个函数来获取职位详情页的链接。在示例代码中,我们使用了webdriver.Chrome()来启动谷歌浏览器,并使用implicitly_wait()方法智能等待页面加载。 4. 在函数内部,我们使用循环来遍历页面上的所有职位列表,并使用find_elements_by_xpath()方法查找包含职位链接的元素。 5. 使用get_attribute()方法获取链接的href属性,并将其添加到一个列表中。 6. 最后,关闭浏览器,并返回职位详情页链接的列表。 请注意,示例代码中的一些路径可能需要根据你的实际环境进行修改,比如chromedriver的文件位置。 本次案例是爬取51job网站的职位信息。示例代码中使用了selenium库来模拟浏览器行为,并定义了一个函数get_joburllist()来获取职位详情页的链接。 示例代码中的函数get_joburllist()使用了webdriver.Chrome()来启动谷歌浏览器,并使用find_elements_by_xpath()方法查找职位链接的元素。 如果在使用selenium启动浏览器时遇到了错误,可能是因为缺少了chromedriver或者chromedriver版本不匹配。请确保你已经正确安装了chromedriver,并且与你使用的谷歌浏览器版本相匹配。 请注意,以上只是一个示例代码的概述,具体实现还需要根据你的需求和实际情况进行调整。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值