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
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值