zoukankan      html  css  js  c++  java
  • 爬虫(一)—— 爬取一个简单的网站

    目录

    • 一、爬一个简单的网站
    • 二、模拟登录与使用selenium
    • 三、多线程爬取与反爬策略
    • 四、加密与解密
    • 五、APP数据抓取
    • 六、分布式爬虫

    一、爬取一个简单的网站

    本章教程,我们使用python爬取博客园的文章,并解析获取到的数据,重点会介绍几种不同python库的使用方法来获取数据。爬取一个网站的第一步是分析请求,工具是使用Chrome浏览器、Finder或Charles来分析,不清楚的请求分析过程,可自行百度。

    1、使用requests库获取数据

    代码1

    
    
    
    # -*- coding: utf-8 -*-
    
    # 设置系统编码
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    # 引入requests库
    import requests
    from bs4 import BeautifulSoup
    
    # 目标页面地址
    url = 'https://www.cnblogs.com/'
    
    # 构建请求头
    headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
            'Connection': 'keep-alive',
            'Host': 'www.cnblogs.com',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
    }
    
    
    # 获取页面数据
    page = requests.get(url,headers=headers)
    
    # 打印页面结果
    print page.text
    
    

    2、使用Request库获取数据

    代码2

    
    # -*- coding: utf-8 -*-
    
    # 设置系统编码
    # -*- coding: utf-8 -*-
    
    # 设置系统编码
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    from urllib2 import Request, urlopen, URLError, HTTPError
    
    # 目标页面地址
    url = 'https://www.cnblogs.com/'
    
    # 构建请求头
    headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Content-Type': 'text/html;charset=utf-8',
            'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
            'Connection': 'keep-alive',
            'Host': 'www.cnblogs.com',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
    }
    
    # 构建请求
    req = Request(url,headers=headers)
    
    # 获取响应信息
    response = urlopen(req)
    
    # 获取页面数据
    page = response.read()
    
    print page
    
    
    

    3、使用BeautifulSoup解析Html页面的数据

    代码1代码2后面加上代码3

    代码3

       
    # 解析页面结果
    soup = BeautifulSoup(page.text,"lxml")
    
    for i in soup.select('div#post_list div.post_item'):
        print '---------'
        # 获取文章标题
        print "文章标题:"+ i.select('div.post_item_body > h3 > a')[0].string
        # 获取文章链接
        print "文章链接:"+ i.select('div.post_item_body > h3 > a')[0].attrs.get('href')
        # 获取作者
        print "作者昵称:"+ i.select('div.post_item_body > div > a')[0].string
        # 获取作者博客链接
        print "博客链接:"+ i.select('div.post_item_body > div > a')[0].attrs.get('href')
        print '---------'
    

    得到打印结果

    
    ---------
    文章标题:Centos7搭建swarm集群
    文章链接:http://www.cnblogs.com/shihuayun/p/7635329.html
    作者昵称:美好人生shy
    博客链接:http://www.cnblogs.com/shihuayun/
    ---------
    ---------
    文章标题:H5音频处理的一些小知识
    文章链接:http://www.cnblogs.com/interesting-me/p/7634276.html
    作者昵称:我吃小月饼
    博客链接:http://www.cnblogs.com/interesting-me/
    ---------
    ---------
    文章标题:C#进阶之AOP
    文章链接:http://www.cnblogs.com/xlxr45/p/7635297.html
    作者昵称:一截生长
    博客链接:http://www.cnblogs.com/xlxr45/
    ---------
    ---------
    文章标题:逐步理解SpringMVC
    文章链接:http://www.cnblogs.com/huhu1203/p/7633060.html
    作者昵称:呼呼呼呼呼65
    博客链接:http://www.cnblogs.com/huhu1203/
    ---------
    
    ...余下省略
    
    
  • 相关阅读:
    合并、媒体查询
    混入、命名空间(less)、继承
    函数(内置函数 和 自定义函数)
    运算、单位、转义、颜色
    选择器嵌套、伪类嵌套、属性嵌套(只在Sass中)
    注释、变量、插值、作用域
    二路归并排序java实现
    堆排序Java实现
    和为S的连续正数序列——牛客网(剑指offer)
    transient 与 volatile 笔记
  • 原文地址:https://www.cnblogs.com/fonxian/p/7524182.html
Copyright © 2011-2022 走看看