美文网首页Python学习提升模版
Python数据分析基础:网页数据获取

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

作者: Stone0823 | 来源:发表于2020-02-18 15:02 被阅读0次

    本篇介绍使用 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')
    

    相关文章

      网友评论

        本文标题:Python数据分析基础:网页数据获取

        本文链接:https://www.haomeiwen.com/subject/ulmgfhtx.html