爬虫(三)——数据提取(1)

数据提取(1)

数据提取
  • 概念:从响应中获取我们想要的数据的过程
数据分类
  • 非结构化的数据:html等
    • 处理方法:正则表达式、xpath
  • 结构化数据:json、xml等
    • 处理方法:转化为python数据类型
数据提取之json
  • 由于把json数据转化为python内建数据类型很简单,所以爬虫中,如果我们能够找到返回json的URL,就会尽量使用这种URL
  • JSON的概念:是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
  • 如何找到json的url
    • 使用chrome切换到手机页面
      • 寻找想要提取的数据的json
      • JSONView插件
    • 使用抓包app
  • json字符串与python数据类型之间的转化
    • json.loads()可以把json字符串转化为python数据类型(字典)
      • 可以使用pprint格式化输出
    • json.dumps()可以把python数据类型转化为json字符串
      • 由于文件中不能直接写入字典,所以需要转化成字符串
import json
import requests
from pprint import  pprint   #格式化输出

# 这里的header中要加入referer因为豆瓣会判断是从哪里访问的无法直接发送请求
headers = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Mobile Safari/537.36",
    "Referer": "https://www.baidu.com/s?wd=https%3A%2F%2Fm.douban.com%2Frexxar%2Fapi%2Fv2%2Fmovie%2Fmodules%3Ffor_mobile%3D1&rsv_spt=1&rsv_iqid=0xa31d1229007d429f&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=%25E8%25B1%2586%25E7%2593%25A3%25E7%2588%25AC%25E5%258F%2596%25E7%259A%2584jsonurl%25E6%2597%25A0%25E6%25B3%2595%25E4%25BD%25BF%25E7%2594%25A8&rsv_t=9888CbGuwCjegyn3%2BOahTHhabDdeymSywmAFOx6FHg1Ivx8uUQQq%2FGeqiDu4DqlOAgf1&inputT=670&rsv_pq=f7f383570018a710&rsv_n=2&rsv_sug3=46&rsv_sug2=0&rsv_sug4=670"}

url = "https://m.douban.com/rexxar/api/v2/movie/modules?for_mobile=1"

response = requests.get(url, headers=headers)

# print(response)

# 这样不加转换会直接就是str类型
# print(response.content.decode())

# 使用json.loads把json字符串转化为python类型(字典)
ret1 = json.loads(response.content.decode())

with open("douban.json","w",encoding="utf-8") as f:
    # 文件默认写入方式是ascii,这里用ensure_ascii=False就不是ascii写入utf-8
    # 下一集在上一级的基础上退后两格
    f.write(json.dumps(ret1,ensure_ascii=False,indent=2))

pprint(ret1)
  • 包含json的类文件对象与python数据类型之间的转化(具有read()或者write()方法的对象就是类文件对象,例:f=open(“a.txt”,“r”) f就是类文件对象)
    • json.load()把包含json的类文件对象转化为python
    • json.dump()把数据类型转化为包含json的类文件对象
with open("douban.json","r",encoding="utf-8") as f:
    ret2 = f.read()
    ret3 = json.loads(ret2)
    print(ret3)
# 相较之下,直接使用json.load提取json中的数据,省去了一不f.read()   
with open("douban.json","r",encoding="utf-8") as f:
    ret4 = json.load(ret2)
    print(ret3)
*******************
with open("douban.json","w",encoding="utf-8") as f:
    f.write(json.dumps(ret1,ensure_ascii=False,indent=2))
# json.dump能够把python类型放入类文件对象中
with open("douban1.json","w",encoding="utf-8") as f:
    json.dump(ret1,f,ensure_ascii=False,indent=2)
  • json使用注意点

    • json中的字符串都是双引号引起来的
    • 如果不是双引号就不是json
      • 可以使用eval把简单的字符串和python类型的转换
      • replace:把单引号替换为双引号
    • 往一个文件中写入多个json串,不再是一个json串,不能直接读取
      • 一行写一个json串,按照行来读取
  • Json在数据交换中起到了一个载体的作用,承载着相互传递的数据

    • Json与js,java,python有一种一一对应关系
    • XML没有与其他语言的对应关系,只能手动解析

(续)数据提取之正则表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用pyquery可以通过CSS选择器或XPath表达式来查找HTML文档中的元素,从而提取所需的数据。具体步骤如下: 1. 导入pyquery库:`from pyquery import PyQuery as pq` 2. 加载HTML文档:`doc = pq(html)` 3. 使用CSS选择器或XPath表达式查找元素:`doc('selector')`或`doc.xpath('xpath_expression')` 4. 提取元素的文本内容、属性值等数据:`element.text()`或`element.attr('attribute_name')` 例如,假设我们要从以下HTML文档中提取所有链接的URL地址: ```html <html> <body> <a href="https://www.baidu.com">百度</a> <a href="https://www.google.com">谷歌</a> <a href="https://www.bing.com">必应</a> </body> </html> ``` 可以使用以下代码实现: ```python from pyquery import PyQuery as pq html = ''' <html> <body> <a href="https://www.baidu.com">百度</a> <a href="https://www.google.com">谷歌</a> <a href="https://www.bing.com">必应</a> </body> </html> ''' doc = pq(html) links = doc('a') # 使用CSS选择器查找所有<a>元素 for link in links: url = pq(link).attr('href') # 提取<a>元素的href属性值 print(url) ``` 输出结果为: ``` https://www.baidu.com https://www.google.com https://www.bing.com ``` ### 回答2: Python爬虫是目前互联网上非常常见的一种数据采集方式,通过Python程序代码模拟人类浏览器行为,从目标网站上自动抓取所需数据爬虫数据提取方式有很多种,其中比较流行的一种方式就是使用pyquery查找元素。 pyquery是Python的一种强大的解析html和xml文档的库,它采用了jQuery风格的语法,对于提取数据非常方便快捷。下面我们来介绍pyquery的用法。 1. 安装pyquery库:使用pip命令可以很方便地安装pyquery库,如下所示: ``` pip install pyquery ``` 2. 导入pyquery库:在Python程序代码中导入pyquery库,如下所示: ``` from pyquery import PyQuery as pq ``` 3. 初始化pyquery对象:通过url或html文本初始化pyquery对象,如下所示: 通过url初始化: ``` doc = pq(url='http://www.baidu.com') ``` 通过html文本初始化: ``` html = ''' <html> <head> <title>python爬虫数据提取方式——使用pyquery查找元素</title> </head> <body> <div class="content" id="content-div"> <p>这是一个示例文本</p> </div> </body> </html> ''' doc = pq(html) ``` 4. 查找元素:使用find、children、siblings等方法查找元素,如下所示: 查找元素: ``` p = doc('p') ``` 查找元素属性值: ``` div_id = doc('#content-div').attr('id') ``` 5. 获取元素内容:使用text、html方法获取元素内容,如下所示: 获取文本内容: ``` p_text = p.text() ``` 获取html内容: ``` div_html = doc('#content-div').html() ``` 总之,pyquery是Python爬虫数据提取中很实用的一种工具,通过它可以快速方便地获取到所需数据。在使用pyquery时,需要了解基础的HTML语法,并掌握pyquery中的各种查找、遍历和属性操作方法。 ### 回答3: Python爬虫数据提取方式之一是使用pyquery查找元素。Pyquery是一个Python库,它是在jQuery的基础上构建的,可以用来解析和操作HTML文档。使用Pyquery可以方便快捷地从网页中提取需要的数据。 使用Pyquery查找元素的过程分为以下几步: 第一步是获取网页源代码。通常情况下,可以使用Python Requests库获取网页源代码,并将其保存为一个字符串类型的变量。 第二步是使用Pyquery构建doc对象。使用Pyquery的from_string()方法可以将网页源代码转换为Pyquery类型的对象。 第步是通过选择器选取元素。类似于使用jQuery选择器选取元素一样,使用Pyquery的find()方法和eq()方法可以选取需要的元素。 第四步是获取元素的属性或文本值。使用Pyquery的attr()方法可以获取元素的属性值,text()方法可以获取元素的文本值。 最后是对获取的数据进行处理和存储。可以使用Python的各种数据处理和存储工具对获取的数据进行处理和存储,例如使用Pandas库进行数据分析和处理,使用MySQL或MongoDB等数据库进行数据存储。 总之,使用Pyquery查找元素是Python爬虫重要的数据提取方式之一,通过选取网页中需要的元素,并获取其属性或文本值,可以快速而准确地抓取数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值