准备工作
准备抓取的网址:
http://www.guandian.cn/list_cat_tag/
网页预览:
准备抓取的内容:
资讯标题、发布时间、内容摘要、标签
通过检查网页元素,查看准备抓取的内容分别在网页数据中的哪个节点:
运行环境:
Win10、Python3.6、PyCharm
需要用到的python模块:
requests —— 请求网页数据
lxml —— 解析和提取网页数据
csv —— 存储数据
期望达到的结果:
实现过程
1)导入模块
import requests
from lxml import etree
import csv
「导入模块」使用的语句为 import 或 from...import :
import 模块名:导入一个模块,相当于导入的是一个文件夹。在调用它时,需要使用:模块名.函数名
from 模块名 import 函数名:导入一个模块中的一个函数,相当于导入了一个文件夹中的一个文件。当调用它时,可以直接使用 函数名。
2)新建文件
# 新建csv文件,并写入字段名
csvFile = open('资讯.csv', 'a', newline='')
writer = csv.writer(csvFile)
writer.writerow(['发布时间', '资讯标题',
'内容摘要', '标签'])
导入完模块以后,需要新建一个csv文件用于存储将要获取的数据。
这里使用了 open 语句来新建/打开文件,当要打开的文件“资讯.csv”不存在时会自动新建一个以"资讯"命名的csv文件。
csv.writer() 用于写入csv文件数据,返回一个对象。
writerow() 按行写入数据,一次写入一行。
3)获取网页内容,并写入文件
'''获取网页数据,进行解析'''
url = 'http://www.guandian.cn/list_cat_tag/'
response = requests.get(url)
html = etree.HTML(response.text)
# 将解析对象转化为字符串进行查看
result = etree.tostring(html,
encoding='utf-8')
print(result.decode('utf-8'))
使用 requests.get 方法发送网络请求,获取指定网页的 html 文档。
然后,使用 lxml 模块中的 etree.HTML 解析该 html文档,并将其转换为树形结构,每一个节点都可以作为一个对象。
这时可以使用 etree.tostring 将解析对象转化成字符串格式查看内容,运行结果如下:
可以进一步查看需要抓取的内容所在的节点。首先定位每一条资讯所在的节点,再定位资讯下4项内容所在的节点,如图所示:
接下来,利用 XPath 定位并提取出想要的文本,通过 for 循环,将每一条资讯按行写入 csv 文件。
'''提取所需内容,并写入文件'''
newsList = html.xpath(
'//div[@class="con_l_con_r"]')
for news in newsList:
newsTime = news.xpath('
.//div[@id="keyword"]/span/text()')
newsTitle = news.xpath('.//a/h3/text()')
newsAbstract = news.xpath('.//p/text()')
newsTag = news.xpath('
.//div[@id="keyword"]/a/text()')
# 写入文件
writer.writerow([newsTime, newsTitle,
newsAbstract, newsTag])
运行后,获取的数据写入csv文件,由于没有指定存储路径,因此该文件自动存储的位置与代码文件所在位置相同:
完整代码
-------------- End --------------
自在不思量
个人微信号 : nanyinbeiyi
欢迎交流 欢迎指正 欢迎分享
https://mp.weixin.qq.com/s/3Xz1FaTZmWdYxgSZW3Q_cg