python 模拟登陆智联_智联招聘数据爬取(入门篇)

python 模拟登陆智联_智联招聘数据爬取(入门篇)_第1张图片

上一篇文章《你了解数据分析师吗?》中的数据来源于智联招聘网站。爬取智联招聘网站的数据是一项比较复杂的爬虫工程,作者希望通过四篇文章(入门篇、踩坑篇、基础篇和进阶篇)详细介绍对智联招聘网站爬取的过程。智联招聘网站对于网络爬虫的限制已经比较严格,搞清楚所介绍的方法足以应对目前的绝大多数网站。那爬虫到底是什么呢?作者认为爬虫是以获取数据为目的,以互联网网站为对象的自动化数据采集程序。作为爬虫的入门篇,本文主要介绍两个问题,一是了解爬虫的对象——网页,二是介绍python基本的爬虫程序。


网页是如何生成的

浏览网页肯定需要浏览器,从浏览器发出对某个网页的请求;服务器判断网页请求是否合法,合法情况下返回网页数据;浏览器通过解析服务器返回的数据,生成我们看到的网页。

python 模拟登陆智联_智联招聘数据爬取(入门篇)_第2张图片

爬虫基本上是围绕着这个流程进行的,比方说模拟用户搜索点击的selenium,或者使用requests库伪装成浏览器向服务器请求数据,使用lxml、beautifulsoup库等实现对网页的解析提取相应的数据。

搜索点击、发出请求、服务器返回数据都是比较容易理解的过程,网页的解析是因为服务回传的是代码,不是浏览器呈现的网页,为了能够准确定位所要爬取的数据,需要简单了解网页的代码构成。也就是需要简单了解下HTML、CSS和JavaScript。对于这三种语言,有篇文章解释的很到位。

对于一个网页,HTML定义网页的结构,CSS描述网页的样子,JavaScript设置。一个很经典的例子是说HTML就像 一个人的骨骼、器官,而CSS就是人的皮肤,有了这两样也就构成了一个植物人了,加上javascript这个植物人就可以对外界刺激做出反应,可以思 考、运动、可以给自己整容化妆(改变CSS)等等,成为一个活生生的人。
理解HTML、CSS、JavaScript_weixin_41713592的博客-CSDN博客

爬虫其实更希望爬取“植物人”,因为简单直接,提出访问请求,服务器返回网页数据,解析网页提取数据即可。当有了JavaScript后,会在浏览器中运行相应的代码,导致一般的爬虫难以得到相应的数据。

对于HTML的了解,可以看懂比较简单的标签代码就可以,相应的免费教程也很多,在这里就不多赘述了,推荐教程:HTML简介|菜鸟教程

CSS主要是对HTML的美化作用,通过设定元素的位置和格式,使得浏览器呈现出多姿多彩的网页。

大体理解下JavaScript的作用,上面的例子中提到JavaScript类似于大脑的作用。JavaScript的作用可以分为两个方面,一是改变HTML的内容,通过相应的函数实现网页源码和显示的内容的不同;二是实现交互,通过浏览者的点击产生不同的展示。目前的绝大部分网页都包含了JavaScript,这就使得爬虫比较困难。

python爬虫入门

在这一部分,主要介绍两种基础的爬虫方法。对照“网页是如何产生的”流程,认识下python是如何实现爬虫的。

在介绍相应的代码之前,建议大家安装anaconda(python 3.x版本),对于数据分析师而言,anaconda是较为方便的工具,其自身已经配备大量的库,操作便捷。其自带的jupyter notebook和Spyder更是非常方便的工具。

1.模拟浏览器向服务器请求数据

以豆瓣爬虫为例

import requests         #向服务器请求数据
from lxml import etree  #该库用于解析服务器返回的数据

url = 'https://movie.douban.com/top250?start=0&filter=' #想要爬取的网页链接

#将爬虫程序伪装成浏览器向服务器请求数据
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063'}

r = requests.get(url, headers=headers) #向服务器请求数据

print(r.status_code) #200表示请求成功
print(r.text) #打印出返回的数据,可以发现我们想要的数据就在r里面

#使用lxml解析r,或者beautifulsoup库进行解析
html = etree.HTML(r.text)

data = []
for i in range(1,25):
    data.append(html.xpath('//*[@id="content"]/div/div[1]/ol/li['+str(i)+']/div/div[2]/div[1]/a/span[1]/text()')[0])
print(data)

简单解释下上面的代码:

  • 确定想要爬取的网页:定义url
  • 使用requests库对url进行请求,同时设置headers变量,将请求伪装成浏览器请求,避免网站屏蔽爬虫
  • 将请求后返回的数据存入变量r(包含返回的状态码、内容等)
  • 使用lxml库解析变量r.text
  • 使用xpath方法定位想要的数据(更多元素定位方法参考http://www.pyzhishiquan.com/locate-element.html)

2.使用selenium实现网页爬虫

以获取某些位置经纬度的项目为例介绍selenium。selenium可以理解为自动化的操作浏览器,模仿个人打开浏览器,网页请求等。获取位置的经纬度可以通过高德提供的网页工具实现。在网页的基本操作:输入地址→点击“搜索”→复制坐标结果→粘贴。将上述过程使用selenium自动化,代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time 
import pyperclip #实现粘贴
city = [
        '北京',
        '天津',
        '济南',
        '青岛',
        '石家庄'
        ]
data = []
for i in city:    
    browser = webdriver.Chrome() #打开谷歌浏览器    
    browser.get("https://lbs.amap.com/console/show/picker") #打开网页    
    inputLocation=browser.find_element_by_xpath('//*[@id="txtSearch"]') #定位输入框    
    inputLocation.send_keys(i) #输入城市名称    
    inputLocation.send_keys(Keys.ENTER) #使用回车代替“点击搜索”    
    copylocation=browser.find_element_by_xpath('//*[@id="myPageTop"]/table/tbody/tr[2]/td[2]/a') #定位复制按钮    
    copylocation.click() #点击复制    
    time.sleep(3) #避免操作过快,复制后暂定3秒,可缩短    
    aa = pyperclip.paste() #粘贴复制的经纬度数据    
    print(aa) #打印出来监控数据是否正常    
    data.append(aa) #保存到列表    
    browser.close() #关闭浏览器

selenium的使用比较方便,需要注意的是selenium+webdriver的安装,相关的博客比较多,在这里不再赘述。


总结:作为智联招聘数据爬虫的入门篇,介绍了网页是如何生成的,并介绍了两个简单的爬虫例子供大家入门。本文首发公众号“数据科学家进阶之路”,主要专注数据分析所需的技能,通过相应的案例熟悉模型算法,通过实际的业务事例熟悉商业逻辑,通过读书积累分享思维方式。期待大家关注。

拓展阅读:

HTML简介|菜鸟教程:https://www.runoob.com/html/html-intro.html

JavaScript简介|菜鸟教程:https://www.runoob.com/js/js-tutorial.html

selenium的更多介绍:http://www.selenium.org.cn/1598.html

你可能感兴趣的:(python,模拟登陆智联)