Python爬虫从入门到入魔(5)-百越白狼社区-弘客联盟新手区-弘客联盟

Python爬虫从入门到入魔(5)

数据提取

  • jsonpath使用
  • 正则查找
  • xpath查找及使用
  • bs4使用
  • csv文件写入

jsonpath介绍

812749e1a3085425

使用普通查找:

print(data["store"]["book"][0]["author"]) # 找到book下的第一个author

使用jsonpath查找:

42250b0f65144418

正则

re语法:

re 是匹配字符串内容的一种规则

  1. re.compile 正则表达式的语法
  2. re.search 找一个
  3. re.match 从头找一个 没有返回None
  4. re.findall 找所有 返回列表
.       匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
*       匹配0个或多个的表达式
+       匹配1个或者多个的表达式
?       匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
[]       表示一组字符。
"|"      A|B,创建一个正则,将匹配A或B。

\s      匹配任何空白字符
\d      匹配任何数字

xpath

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高

全称为XML Path Language 一种小型的查询语言

说到XPath这门语言,不得不说它所具备的优点:

  1. 可在XML中查找信息
  2. 支持HTML的查找
  3. 通过元素和属性进行导航

xpath常用规则

  • nodename 选取此节点的所有子节点
  • / 从当前节点选取直接子节点
  • // 从当前节点选取子孙节点
  • . 选取当前节点
  • .. 选取当前节点的父节点
  • @ 选取属性

Beautiful Soup

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.

  • tag是bs4中的一个对象之一, 其中tag最重要的属性是name 和attributes!
  • string&find_all
  • css选择器

csv文件存储

  • csv 文件是大数据文件存储格式的文件 结构与excel不同。
  • CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。
  • 因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
  • 例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。

例子1:

import csv

# 以字典的方式写入数据
students = [
    {"name": "张三", "age": 23, "height": 156},
    {"name": "李四", "age": 23, "height": 156},
    {"name": "王五", "age": 34, "height": 156},
    {"name": "赵六", "age": 35, "height": 156},
]
headers = ('name', "age", "height")  # 表头
fp = open("student3.csv", "w", encoding="utf-8", newline='')  # 返回一个操作文件的句柄
writer = csv.DictWriter(fp, headers)

writer.writeheader()  # 写入头部
writer.writerows(students)  # 写入内容

fp.close()

例子2:

import csv

以元祖的方式

定义表头
headers = ('name', "age", "height")

定义数据
students = [
    ("王五", 24, 176),
    ("李四", 24, 176),
    ("张三", 23, 178)
]

fp = open("student.csv", "w", encoding="utf-8", newline='')
writer = csv.writer(fp)  # 返回一个写入的对象
writer.writerow(headers)
writer.writerows(students)
fp.close()
请登录后发表评论

    没有回复内容