Python爬虫——正则解析

正则解析

下载requests库

pip install requests

请求传参之params参数

作用:关键字传参

标准写法如下

import requests
param = {
    "kw":"python"
}
res = requests.get("https://www.baidu.com/",params=param)
res

Re解析_正则表达式

练习工具

开源中国中Tool中的正则工具

image-20230106113921050

常用元字符

字符作用
.通配符,匹配除换行符之外的任意字符
\正则转义
^匹配字符串的开始位置,在 []中 表示不取字符
$匹配字符串的结束位置
{}匹配次数 {n} n表示0到+∞,自定义匹配次数
*匹配 0 次或 多次
+匹配 1 次或 多次
?匹配 0 次或 1 次
[]字符集合 数字集合:[^0-9] 英文字符集合:[^a-z] [A-Z]
()分组匹配
|或运算 分支条件

转义字符

\s 空白符
\S
\w 大小写数字下划线
\W
\n 换行符
\d 数字
\D

量词

作用: 控制元字符出现的次数

image-20230106114255277

贪婪模式和非贪婪模式

image-20230106114746237

贪婪模式下最长匹配
非贪婪模式最短匹配

  • 案例

image-20230106114835064

image-20230106114910304

正则匹配的限制

正则表达式中*和{}无法一起使用,否则报一下错误

image-20230204202430957

单次匹配和多次匹配

re.search()–>匹配一次

re.findall()–>匹配多次

实战–天堂电影

  1. 抓包—>以2023必看热片为例
  2. 找到元素位置
  3. image-20230206210723676
  4. 注意编码
  5. image-20230206211502931
import requests
import os
import re
url = "https://www.dytt89.com/html/bikan/"
res = requests.get(url=url)
res.encoding = "gb2312"
film_name = re.findall("<a href.*?>(.*?)</a>",res.text)#节点<a href="/i/107097.html" class="ulink" title="2022年国产动作犯罪片《扫黑行动》HD国语中字">2022年国产动作犯罪片《扫黑行动》HD国语中字</a>
film_href = re.findall("<a (href=.*?).html",res.text)
data = {}
i = 0
for every_name in film_name:
    data[every_name]=film_href[i]
    i+=1
    data
data

实战–百度文库

  1. 抓包

    image-20230206174026567

  2. 存储响应内容到vscode(新建一个index.html)–>右键格式化文档–>ctrl+k+ctrl+0折叠文档

  3. 清洗一下响应数据(包括css和javascrip)—>只留html相关

  4. image-20230206175022352

  5. 通过元素定位按钮找到文字所在位置

  6. image-20230206183913549

  7. 代码示例如下
    
  8. import requests
    import os
    import re
    url = "https://wenku.baidu.com/view/57543f1b6bd97f192279e95b.html?fr=income1-doc-search&_wkts_=1675677743981&wkQuery=%E9%9B%86%E6%88%90%E7%94%B5%E8%B7%AF"
    dir_name = os.path.dirname(__file__)
    res = requests.get(url=url)
    index_html = os.path.join(dir_name,"集成电路.html")
    with open(index_html,mode="w") as f:
        f.write(res.text)
    data = re.findall("<p.*?>(.*?)</p>",res.text)
    data = ''.join(data)
    data
    data = re.sub('&nbsp;','',data)#将空白符替换为空
    data = re.sub(r'\\n',r"\n",data)
    data_txt = os.path.join(dir_name,"集成电路.txt")
    with open(data_txt,mode="w") as f:
        f.write(data)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾有所爱,其名华夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值