Python数据分析基础:网页数据获取

本篇介绍使用 python 获取网页数据的方法,要爬取 51job Python 职位的招聘信息。在获取数据上,Python 的灵活度比 Power Query 高出 n 个档次。我们打开 https://www.51job.com/ 网页,在搜索的职位栏中,输入 python,地点选择全国。


url 地址栏的地址很长,一会我们要用到,这个地址我在下面标记的部分是页码:

接下来,我们在页面任意地方右键,点击菜单【查看网页源代码】

第一个关注点是页面的字符编码,可以看到 51job 的字符编码是 gbk:

然后,我们找到页面职位表格的 html 源码。页面内容如下:

对应的 html 源码如下,可以通过查找找到这段代码:

有了这些,就可以编码了。我使用正则表达式来获取页面源码的内容,采用简单的懒惰模式,也就是匹配尽可能少的字符,在能使整个匹配成功的前提下使用最少的重复。.*? 表示任意字符,(.*?) 表示提取符合模式的字符。提取的信息通过 pandas 模块导入到 Excel。本示例用到的 pandas 为第三方模块,其他为 Python标准模块。pandas 用 pip 的方式安装。

import urllib.request # python标准模块
import re # python标准库正则表达式模块
import pandas as pd # pandas库,第三方模块,用pip方式安装

jobs = []

def get_data(page):
    # url 来自页面URL拷贝
    url = "https://search.51job.com/list/000000,000000,0000,00,9,99," \
          "python,2,{}.html?lang=c&stype=&postchannel=0000" \
          "&workyear=99&cotype=99&degreefrom=99&jobterm=99" \
          "&companysize=99&providesalary=99&lonlat=0%2C0" \
          "&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0" \
          "&address=&line=&specialarea=00&from=&welfare="\
        .format(page)
    html = urllib.request.urlopen(url).read().decode('gbk')
    return html

def parse_job_info(html):
    pattern = r'<p class="t1 ">.*?<a target="_blank" title="(.*?)"' + \
               '.*?<span class="t2"><a target="_blank" title="(.*?)"' + \
               '.*?<span class="t3">(.*?)</span>' + \
               '.*?<span class="t4">(.*?)</span>' + \
               '.*?<span class="t5">(.*?)</span>'

    content = re.findall(pattern, html, re.S)
    return content 

if __name__ == "__main__":    
    for i in range(1, 21): # 获取前20页的数据
        html = get_data(page=i)
        found = parse_job_info(html)
        jobs = jobs + found

    df = pd.DataFrame(jobs, columns=['职位','公司','工作地点', '薪资','发布日期'])
    df.to_excel('python-jobs.xlsx')
发布了192 篇原创文章 · 获赞 156 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/stone0823/article/details/104373003