爬虫(一)—— 爬取一个简单的网站
目录
- 一、爬一个简单的网站
- 二、模拟登录与使用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/
---------
...余下省略
关于作者
后端程序员,五年开发经验,从事互联网金融方向。技术公众号「清泉白石」。如果您在阅读文章时有什么疑问或者发现文章的错误,欢迎在公众号里给我留言。