• 那是从何处传来的钟声呢?偶尔听到那钟声,平添一份喜悦与向往之情。

简单的Python爬虫实现,以及一些要注意的地方

前端 Nanait 2年前 (2018-04-17) 247次浏览 已收录 0个评论 扫描二维码
“人生苦短,我用Python

前言

在公司来了快一个月了,除了自己的技能,还学到了 AngularJS,最近的项目也是用Python来做,又是一波学习的机会。用了几天发现,我的天呐,这写的真的轻松!!!真是应了那句话:人生苦短,我用Python。在业余时间,了解了其他关于Python有趣的事,比如今天这篇文章的爬虫

正文

首先得安装Python解析器,公司里用的是Python2.7,那我们去下载吧。

点这里下载 Python2.7

然后就也别在控制台敲什么代码了,直接集成环境吧,下载 PyCharm(idea 家族的软件)

安装购买破解什么什么的就 Google 咯

先来说说爬虫

1.了解爬虫的基本原理及过程

大部分爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。

简单来说,我们向服务器发送请求后,会得到返回的页面,通过解析页面之后,我们可以抽取我们想要的那部分信息,并存储在指定的文档或数据库中。

在这部分你可以简单了解 HTTP 协议及网页基础知识,比如 POST\GET、HTML、CSS、JS,简单了解即可,不需要系统学习。

2.学习 Python 包并实现基本的爬虫过程

Python 中爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,建议你从 requests+Xpath 开始,requests 负责连接网站,返回网页,Xpath 用于解析网页,便于抽取数据。

如果你用过 BeautifulSoup,会发现 Xpath 要省事不少,一层一层检查元素代码的工作,全都省略了。掌握之后,你会发现爬虫的基本套路都差不多,一般的静态网站根本不在话下,小猪、豆瓣、糗事百科、腾讯新闻等基本上都可以上手了。

来看一个爬取我朋友博客的例子:

简单的 Python 爬虫实现,以及一些要注意的地方我们通过定位,得到了标题的 XPath 信息:

//*[@id=”docker”]


导入 requests、lxml 模块

使用已有的库,之所以说它好用,就是库多呀。对了,Python2.7 的字符编码问题,要在顶上写一句代码,不然输出中文会报错。

# -*- coding: UTF-8 -*-

import requests
from lxml import etree

还是可能有编码问题

# -*- coding: UTF-8 -*-

import requests
from lxml import etree

# python2.7 要是报编码问题,就加这三行,python3 不用加
import sys
reload(sys)
sys.setdefaultencoding('utf8')

我们要抓取的页面链接:http://lifetrut.com/2018/04/14/hello-docker-media/

如果是要抓取所有文章,那就分析这个网站的文章 url 的规则(这里就不做赘述了,我会把这套爬虫完善,爬取朋友博客的文章,并且自动加入我的数据库,毕竟他写的技术文章还是可以的,Luob 的博客)(注:已授权)(再注:他都是在跟我合租,不让爬就不让他住了哈哈哈哈)

# -*- coding: UTF-8 -*-

import requests
from lxml import etree

# python2.7 要是报编码问题,就加这三行,python3 不用加
import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 我们要抓取的页面链接
url = 'http://www.lifetrut.com/2018/04/14/hello-docker-media/'

用 requests 库的 get()方法下载网页

# -*- coding: UTF-8 -*-

import requests
from lxml import etree

# python2.7 要是报编码问题,就加这三行,python3 不用加
import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 我们要抓取的页面链接
url = 'http://www.lifetrut.com/2018/04/14/hello-docker-media/'

# 用 requests 库的 get 方法下载网页
r = requests.get(url).text

解析网页并且用 XPath 定位,并输出抓取的文章标题

# -*- coding: UTF-8 -*-

import requests
from lxml import etree

# python2.7 要是报编码问题,就加这三行,python3 不用加
import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 我们要抓取的页面链接
url = 'http://www.lifetrut.com/2018/04/14/hello-docker-media/'

# 用 requests 库的 get 方法下载网页
r = requests.get(url).text

# 解析网页并且定位节点
s = etree.HTML(r)
title = s.xpath("//*[@id=‘docker’]")

# 输出抓取的内容
print title

出现问题

1、访问出现了 400。解决方法:加入请求头

2、XPath 用 ID 定位失败,输出空。

3、又是编码问题,输出了字符编码,没有输出中文。

以下是最终的代码示例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import requests
from lxml import etree

# python2.7 要是报编码问题,就加这三行,python3 不用加
import sys

reload(sys)
sys.setdefaultencoding('utf8')

# 我们要抓取的页面链接
url = 'http://www.lifetrut.com/2018/04/14/hello-docker-media/'

header = {
    'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    'Accept-Encoding': "gzip, deflate",
    'Accept-Language': "zh-CN,zh;q=0.9",
    'Cache-Control': "max-age=0",
    'Connection': "keep-alive",
    'Host': "lifetrut.com",
    # 'If-Modified-Since' : "Sat, 14 Apr 2018 19:32:34 GMT",
    'Upgrade-Insecure-Requests': "1",
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 "
                  "Safari/537.36",
    'X-Requested-With': "XMLHttpRequest"
}

# 用 requests 库的 get 方法下载网页
r = requests.get(url, headers=header).text

# print(r)

# 解析网页并且定位节点
s = etree.HTML(r)
title = s.xpath("//html/body/header/div[2]/div/div/div/h1/text()")

print title[0].encode("utf-8")

最后

这只是简单的实现爬虫,我会把其他功能完善,我也是现学现卖,有什么错误欢迎指正,反正我不一定会改哈哈哈哈

大家一起加油


何处钟 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:简单的 Python 爬虫实现,以及一些要注意的地方
喜欢 (0)
[15211539367@163.com]
分享 (0)

您必须 登录 才能发表评论!