python --version
查看 Python 版本,对于学习者来说,保持使用最新版本的 Python 是个好习惯。pip install requests_html
,根据网络情况,通常需要几分钟时间。新建一个 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行
查看一段内容的代码,在代码上点击右键,选择 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)
爬虫的目的,是从网站中自动化的批量提取数据。
链接相似 的网页通常具有相似的外观。
外观相似 的网页通常具有相似的网页结构。
这两个相似性是爬虫能够从一系列网站中自动化提取数据的重要基础。
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 方法打印爬虫获取的数据,接下来将把这些数据保存到特定格式文件中。
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文件。
上文代码可写做:
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()