Python爬虫入门 – Programming language

网络爬虫,即通过程序的方式获取互联网或其它内网的内容数据,有结构化的数据也有非结构化数据。

Python在该领域非常受欢迎,对于很多科研人员、程序员来说,获取结构化数据是进行数据分析的必要前提。

下面我们来学习下怎么使用Python进行获取网页内容。注意,以下内容只适合获取非渲染方式的网页,若要使用高级方式则需要引入selenium等其它工具。selenium将在以后的文章中学习。

Python 安装

python 版本分两个主线2.x 和3.x,相互之间不兼容。3.x版本不往下兼容,所以最好是选择3.x版本。

在linux centos下安装

1.先安装依赖

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

2.下载源码

https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz

3.创建目录并解压:

mkdir -p /usr/local/python3
tar -zxvf Python-3.8.2.tgz

4.编译

cd Python-3.8.2
./configure --prefix=/usr/local/python3
make
make install

5.建立软链

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

6.修改Path

PATH``=``$PATH:$HOME``/``bin``:``/``usr``/``local``/``python3``/``bin
export PATH

安装PiP

1.获取安装文件

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

2.执行

python get-pip.py

3.使用pip安装依赖

pip install requests
pip install lxml

编写爬虫

我们以豆瓣为例,获取热门内容作为学习内容,直接上代码:

# -*- coding:utf-8 -*-
import os
import re
import sys
import time
import json
import datetime
import requests
from lxml import etree

def parse_douban():
    try:
        url = "https://www.douban.com/group/explore"

        headers={
            "User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",
            "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Language" : "en-us",
            "Connection" : "keep-alive",
            "Accept-Charset" : "GB2312,utf-8;q=0.7,*;q=0.7",
            "Host": 'www.douban.com',
            "Referer": 'https://www.douban.com/group/explore'
        }
        fname = "douban.json"
        r = requests.get(url, headers=headers, timeout=(5, 10))
        soup = etree.HTML(r.text)
        list = []
        jsondict= {}
        list_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        jsondict["time"] = list_time
        jsondict["title"] = "豆瓣讨论精选"
        for soup_a in soup.xpath("//div[@class='channel-item']/div[@class='bd']/h3/a"):
            blist = {}
            hot_name = soup_a.text.replace("\\n", "").replace("\n", "").replace("\\r", "").replace("\r", "").strip()
            hot_url = soup_a.get('href')
            group = "douban"
            blist["name"]=hot_name
            blist["url"]=hot_url
            list.append(blist)
        jsondict["data"]=list
        print(json.dumps(jsondict, ensure_ascii=False, indent=2, separators=(',',':')))
    except:
        print(sys._getframe().f_code.co_name+"采集错误,请及时更新规则!")

if __name__ == "__main__":
    parse_douban()

在这个代码里面使用到requests获取网页内容,lxml作为解析网页内容并保存到json串。

headers 是HTTP协议里面的一部分,是服务器识别客户端环境的参数,也有服务器作为反爬虫的识别。

headers={
"User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8",
"Accept-Language" : "en-us",
"Connection" : "keep-alive",
"Accept-Charset" : "GB2312,utf-8;q=0.7,*;q=0.7",
"Host": 'www.douban.com',
"Referer": 'https://www.douban.com/group/explore'
}

这里是伪装成浏览器发起访问。

r = requests.get(url, headers=headers, timeout=(5, 10));

这行是使用requests获取网页内容,使用相对其它Http库简单易用得多。非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼。

Requests 是以 PEP 20 的箴言为中心开发的

  1. Beautiful is better than ugly.(美丽优于丑陋)
  2. Explicit is better than implicit.(直白优于含蓄)
  3. Simple is better than complex.(简单优于复杂)
  4. Complex is better than complicated.(复杂优于繁琐)
  5. Readability counts.(可读性很重要)

对于 Requests 所有的贡献都应牢记这些重要的准则。

获取到内容后即使用etree 解析,使用xpath方式获取我们需要的属性或者text。

soup.xpath("//div[@class='channel-item']/div[@class='bd']/h3/a")

这行是获取以下结构中 超链接a 的Element,再通过soup_a.get('href')即可获取url内容。

<div class='channel-item'>
    <div class='bd'>
        <h3>
            <a herf=''></a>
        </h3>
    </div>
</div>

根据网页内容定制json,这里不再展开。

将代码保存在 caiji.py执行即可。

python3 caiji.py
(0)

相关推荐

  • UOS手工编译安装Python3.9

    之前在Loongnix下手工编译安装Python3.6成功了 https://lpwmm.blog.csdn.net/article/details/110121058 今天又重新装回UOS 20专业 ...

  • CentOS7安装Python3.6.8

    CentOS7安装Python3.6.8

  • CentOS 7 新装服务器部署流程

    CentOS 7 新装服务器部署流程

  • centos下安装Python3和虚拟环境

    本文的命令都是在root账户下执行的,假如非root账号执行,提示没有权限,可在命令前加sudo. 一.安装Python3 1> 安装编译环境及相关类库 yum -y groupinstall ...

  • Python爬虫入门教程(十四):爬取有声小说网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  • Python爬虫入门教程:豆瓣Top电影爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理.   基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests p ...

  • Python爬虫入门教程02:笔趣阁小说爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 前文 01.python爬虫入门教程01:豆瓣Top电影爬取 基本开发环境 Python 3 ...

  • Python爬虫入门教程01:豆瓣Top电影爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  • 花了一周时间,终于把python爬虫入门必学知识整理出来了

    Python是近几年最火热的编程语言,大家既然看到了爬虫的知识,想必也了解到python. 很多都说python与爬虫就是一对相恋多年的恋人,二者如胶似漆 ,形影不离,你中有我.我中有你,有pytho ...

  • Python 爬虫入门四之 URLError 异常处理

    大家好,本节在这里主要说的是 URLError 还有 HTTPError,以及对它们的一些处理.1.URLError首先解释下 URLError 可能产生的原因:网络无连接,即本机无法上网连接不到特定 ...

  • Python爬虫入门,快速抓取大规模数据(第二部分)

    通过第一部分的练习,我们已经有了一个可运行的爬虫.这一部分我们详细的看看如何使用BeautifulSoup从网页中提取我们需要的数据,学习的目标是能够使用BeautifulSoup从网页中提取任意的数 ...

  • Python爬虫入门,快速抓取大规模数据

    大到各类搜索引擎,小到日常数据采集,都离不开网络爬虫.爬虫的基本原理很简单,遍历网络中网页,抓取感兴趣的数据内容.这篇文章会从零开始介绍如何编写一个网络爬虫抓取数据,然后会一步步逐渐完善爬虫的抓取功能 ...

  • Python爬虫入门,快速抓取大规模数据(第四部分)

    如果没有读过前两部份的读者,建议先看前面几部份: 当前大部分网站都使用JS动态的加载内容,浏览器执行JS并生成网页内容.因为Python的requests库不会像浏览器一样执行JS,所以抓取到的内容并 ...