Python 爬虫入门
一、准备工作
- 安装 Python 3.6 及以上版本
- 会使用pip安装第三方库
1、Python安装及使用pip安装第三方库
- 官网https://www.python.org/下载并安装,勾选pip安装选项
- 打开控制台,输入
python --version查看 Python 版本,对于学习者来说,保持使用最新版本的 Python 是个好习惯。 - 使用 pip 安装 requests_html 库,
pip install requests_html,根据网络情况,通常需要几分钟时间。
二、提取网页数据
1、使用 Python 下载网页代码
新建一个 crawler.py 文件,输入并执行以下 4 行代码:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://3w.huanqiu.com/a/c36dc8/7KZVzJcCY7K?agt=20&tt_group_id=6667596831221875203')
print(r.text)
可看到输出为:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>惨败!英国脱欧协议草案以149票之差被下议院否决</title>
<meta name="keywords" content="惨败,英国脱欧协议草案,以149票之差,被下议院,否决">
<meta name="description" content="惨败!英国脱欧协议草案以149票之差被下议院否决">
<link rel="shortcut icon" href="/favicon.ico"/>
<link rel="stylesheet" href="//at.alicdn.com/t/font_564819_nzs674i0u17wg66r.css">
<link rel="stylesheet" href="//himg2.huanqiu.com/statics/3w/v2/dist/css/index.css">
<script src="//himg2.huanqiu.com/statics/3w/v2/dist/libs/jquery1.9.1.js" type="text/javascript"></script>
</script>
</head>
#以下省略200行
2、提取网页中所需内容
查看一段内容的代码,在代码上点击右键,选择 Copy -> Copy Selector (或者 Copy CSS Selector、复制 CSS 选择器),就能将这段内容对应的CSS选择器复制到剪贴板
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://3w.huanqiu.com/a/c36dc8/7KZVzJcCY7K?agt=20&tt_group_id=6667596831221875203')
title = r.html.find('#article > h1 > strong', first=True)
# r.html.find() 接受一个 CSS 选择器(字符串形式)作为参数
# 返回在网页中使用该选择器选中的内容。
print(title.text)
三、一个简单的网络爬虫
1、网页结构的相似性
爬虫的目的,是从网站中自动化的批量提取数据。
链接相似 的网页通常具有相似的外观。
外观相似 的网页通常具有相似的网页结构。
这两个相似性是爬虫能够从一系列网站中自动化提取数据的重要基础。
2、爬虫的基本逻辑
根据CSS选择器获取标题及时间:
from requests_html import HTMLSession
session = HTMLSession()
links = ['https://3w.huanqiu.com/a/c36dc8/7KZVzJcCY7K?agt=20&tt_group_id=6667596831221875203', 'https://3w.huanqiu.com/a/c36dc8/7L0gRL1wTny?agt=20&tt_group_id=6667672210636800524', 'https://3w.huanqiu.com/a/fe5d4b/7KZgIE8zTbi?agt=20&tt_group_id=6667448441594970631']
for link in links:
r = session.get(link)
title = r.html.find('#article > h1 > strong', first=True)
date = r.html.find('#article > div.a-info > span.time', first=True)
print(title.text, date.text)
输出:
惨败!英国脱欧协议草案以149票之差被下议院否决 2019-03-13 03:46
港媒:俏江南创始人张兰因藐视法庭被香港法院判监禁1年 2019-03-13 08:48
他低估了美国的心狠手辣,世界500强企业就此被肢解! 2019-03-12 18:19
四、存储格式化数据
前文中一直使用 print 方法打印爬虫获取的数据,接下来将把这些数据保存到特定格式文件中。
1、CSV 格式
Python 提供了标准库 csv 来读写 csv 数据。
新建一个 Python 文件,输入以下代码,并运行。
import csv
file = open('artical.csv', 'w', newline='')
csvwriter = csv.writer(file)
# 写入标题行
csvwriter.writerow(['标题', '时间'])
# 写入数据
csvwriter.writerow(['title1', '10:30'])
csvwriter.writerow(['title2', '11:10'])
csvwriter.writerow(['title3', '12:50'])
file.close()
可用EXCEL或记事本打开artical.csv文件。
2、将爬虫数据写入CSV文件
上文代码可写做:
from requests_html import HTMLSession
import csv
session = HTMLSession()
file = open('artical.csv', 'w',newline='')
csvwriter=csv.writer(file)
csvwriter.writerow(['标题','时间'])
links = ['https://3w.huanqiu.com/a/c36dc8/7KZVzJcCY7K?agt=20&tt_group_id=6667596831221875203', 'https://3w.huanqiu.com/a/c36dc8/7L0gRL1wTny?agt=20&tt_group_id=6667672210636800524', 'https://3w.huanqiu.com/a/fe5d4b/7KZgIE8zTbi?agt=20&tt_group_id=6667448441594970631']
for link in links:
r = session.get(link)
title = r.html.find('#article > h1 > strong', first=True)
date = r.html.find('#article > div.a-info > span.time', first=True)
csvwriter.writerow([title.text, date.text])
file.close()
输出:
以上是爬虫的简单用法和基本逻辑,但离编写一个实际的爬虫还有一段距离。