Python面试题之爬虫(数据提取)

知识点:
  • 整理 爬虫面试题

  • 添加 爬虫的代码

  • 加深 爬虫的理解

  • 版本 python3.6


1. 列举您使用过的Python网络爬虫所用到的解析数据包

  • Re
  • json
  • jsonpath
  • BeautifulSoup
  • pyquery
  • lxml

数据提取主要是问解析库,主流的话也就是问一下xpath,bs4和pyquery的使用


2. xpath语法

这节在面试中问的灵活性比较强,问到的可能性应该是比较小,今天就讲一下用法

  • 提取xml、html中的数据需要lxml模块和xpath语法配合使用
  • xpath定位节点以及提取属性或文本内容的语法
表达式 描述
nodename 选中该元素
/ 从根节点选取、或者是元素和元素间的过渡
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
@ 选取属性
text() 选取文本
  • 节点修饰语法
路径表达式 结果
//title[@lang=“eng”] 选择lang属性值为eng的所有title元素
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素
/bookstore/book[position()>1] 选择bookstore下面的book元素,从第二个开始选择
//book/title[text()=‘Harry Potter’] 选择所有book下的title元素,仅仅选择文本为Harry Potter的title元素
  • 选取未知节点的语法
通配符 描述
* 匹配任何元素节点
node() 匹配任何类型的节点

说实话,一般不会自己写xpath,一般 是下载Chrome插件 XPath Helper,直接copy语法就行,怎么安装自行百度,了解语法是知道自己代码怎么修改和精简


2. jsonpath模块

如果有一个多层嵌套的复杂字典,建议用jsonpath,不复杂就直接按照字典提取

import requests
import jsonpath
import json

# 获取拉勾网城市json字符串
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json'
headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"}
response =requests.get(url, headers=headers)
html_str = response.content.decode()

# 把json格式字符串转换成python对象
jsonobj = json.loads(html_str)

# 从根节点开始,获取所有key为name的值
citylist = jsonpath.jsonpath(jsonobj,'$..name')

# 写入文件
with open('city_name.txt','w') as f:
    content = json.dumps(citylist, ensure_ascii=False)
    f.write(content)
  • json数据在线转换:https://www.json.cn/

数据提取其实是爬虫最重要的其中一环,工具不重要,重要是的方法,当你使用一种矛刺不穿盾的时候,就应该考虑换一种矛,下一篇讲一下爬虫selenium相关的问题,未完待续…

你可能感兴趣的:(Python面试题之爬虫(数据提取))