准备工作

  准备抓取的网址:

http://www.guandian.cn/list_cat_tag/


  网页预览:

爬虫实战 | 抓取资讯_java


  准备抓取的内容:

  资讯标题、发布时间、内容摘要、标签


  通过检查网页元素,查看准备抓取的内容分别在网页数据中的哪个节点:

爬虫实战 | 抓取资讯_java_02


  运行环境:

  Win10、Python3.6、PyCharm


  需要用到的python模块:

  requests —— 请求网页数据

  lxml —— 解析和提取网页数据

  csv —— 存储数据


  期望达到的结果:

爬虫实战 | 抓取资讯_java_03


实现过程

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 将解析对象转化成字符串格式查看内容,运行结果如下:

爬虫实战 | 抓取资讯_java_04

  可以进一步查看需要抓取的内容所在的节点首先定位每一条资讯所在的节点,再定位资讯下4项内容所在的节点,如图所示:

爬虫实战 | 抓取资讯_java_05

  接下来,利用 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文件,由于没有指定存储路径,因此该文件自动存储的位置与代码文件所在位置相同:

爬虫实战 | 抓取资讯_java_06

完整代码

爬虫实战 | 抓取资讯_java_07

 

-------------- End --------------


爬虫实战 | 抓取资讯_java_08

自在不思量

个人微信号 : nanyinbeiyi

欢迎交流 欢迎指正 欢迎分享

https://mp.weixin.qq.com/s/3Xz1FaTZmWdYxgSZW3Q_cg