zoukankan      html  css  js  c++  java
  • Python使用BeautifulSoup爬取网页信息

    简单爬取网页信息的思路一般是

    1、查看网页源码

    2、抓取网页信息

    3、解析网页内容

    4、储存到文件

     

    现在使用BeautifulSoup解析库来爬取刺猬实习Python岗位薪资情况

    一、查看网页源码

     这部分是我们需要的内容,对应的源码为:

     分析源码,可以得知:

    1、岗位信息列表在<section class="widget-job-list">

    2、每条信息在<article class="widget item">

    3、对于每条信息,我们需要提取出的内容是 公司名称,职位, 薪资

    二、抓取网页信息

    使用request.get()抓取,返回的soup是网页的文本信息

    def get_one_page(url):
        response = requests.get(url)
        soup = BeautifulSoup(response.text, "html.parser")
        return soup

    三、解析网页内容

    1、找到起始位置<section>

    2、在<article>中匹配到各项信息

    3、返回信息列表用以存储

    def parse_page(soup):
        #待存储的信息列表
        return_list = []
        #起始位置
        grid = soup.find('section', attrs={"class": "widget-job-list"})
        if grid:
            #找到所有的岗位列表
            job_list = soup.find_all('article', attrs={"class": "widget item"})
    
            #匹配各项内容
            for job in job_list:
                #find()是寻找第一个符合的标签
                company = job.find('a', attrs={"class": "crop"}).get_text().strip()#返回类型为string,用strip()可以去除空白符,换行符
                title = job.find('code').get_text()
                salary = job.find('span', attrs={"class": "color-3"}).get_text()
                #将信息存到列表中并返回
                return_list.append(company + " " + title + " " + salary)
        return return_list

      

    四、存储到文件

    将列表信息存储到shixi.csv文件中

    def write_to_file(content):
        #以追加的方式打开,设置编码格式防止乱码
        with open("shixi.csv", "a", encoding="gb18030")as f:
            f.write("
    ".join(content))

    五、爬取多页信息

    在网页url中 可以看到最后的page代表的是页数信息

    所以在main方法中传入一个page,然后循环运行main(page)就可以爬取多页信息了

    def main(page):
        url = 'https://www.ciweishixi.com/search?key=python&page=' + str(page)
        soup = get_one_page(url)
        return_list = parse_page(soup)
        write_to_file(return_list)
    
    
    if __name__ == "__main__":
        for i in range(4):
            main(i)

    六、运行结果

    七、完整代码

    import requests
    import re
    from bs4 import BeautifulSoup
    
    
    def get_one_page(url):
        response = requests.get(url)
        soup = BeautifulSoup(response.text, "html.parser")
        return soup
    
    
    def parse_page(soup):
        #待存储的信息列表
        return_list = []
        #起始位置
        grid = soup.find('section', attrs={"class": "widget-job-list"})
        if grid:
            #找到所有的岗位列表
            job_list = soup.find_all('article', attrs={"class": "widget item"})
    
            #匹配各项内容
            for job in job_list:
                #find()是寻找第一个符合的标签
                company = job.find('a', attrs={"class": "crop"}).get_text().strip()#返回类型为string,用strip()可以去除空白符,换行符
                title = job.find('code').get_text()
                salary = job.find('span', attrs={"class": "color-3"}).get_text()
                #将信息存到列表中并返回
                return_list.append(company + " " + title + " " + salary)
        return return_list
    
    
    def write_to_file(content):
        #以追加的方式打开,设置编码格式防止乱码
        with open("shixi.csv", "a", encoding="gb18030")as f:
            f.write("
    ".join(content))
    
    
    def main(page):
        url = 'https://www.ciweishixi.com/search?key=python&page=' + str(page)
        soup = get_one_page(url)
        return_list = parse_page(soup)
        write_to_file(return_list)
    
    
    if __name__ == "__main__":
        for i in range(4):
            main(i)
  • 相关阅读:
    table的使用
    Html标签
    mysql -4练习
    mysql -3练习(分组查询后再次筛选,顺逆序排序)
    mysql -2查询单个表的数据时添加各种条件
    mysql数据库简单练习(创建表格,增删改查数据)
    JS监视滚轮向上和向下滑动与滚轮距离上部的距离(转自网络)
    JavaScript (制造简易计算器)
    JavaScript-14(操纵属性和window)
    JavaScript-13(找到单选框的value值与复选框的全选操作)
  • 原文地址:https://www.cnblogs.com/chenchang-rjgc/p/11921393.html
Copyright © 2011-2022 走看看