当前位置: 首页 > news >正文

Python爬取数据(二)

一.example2包下的

1.re模块的compile函数使用

import re

pattern=re.compile(r'\d+')
print(pattern)

2.match的方法使用

import re
pattern=re.compile(r'\d+')
# m1=pattern.match('one123twothree345four')
#参数2:指定起始位置(包含),参数3:终止位置(包含),注意匹配一次成功后结束
m1=pattern.match('one123twothree345four',3,7)
print(m1.group())

3.search方法的使用

import re
pattern=re.compile(r'\d+')
m1=pattern.search('one123twothree345four')
print(m1.group())

4.findall方法的使用

import re
pattern=re.compile(r'\d+')



result=pattern.findall('hello 123 world 456')
print(result)

5.split方法的使用

import re

str1='a,b,c'
print(str1.split(','))

str2='a,b;;c,d'
pattern=re.compile(r"[\s\,\;]+")
print(pattern.split(str2))

6.sub方法的使用

import re
string='<h1 class="test1">HelloWorld</h1>'

pattern=re.compile(r'\d')
print(pattern.sub('2',string))
print(pattern.sub('2',string,1))

pattern=re.compile('<(.\\d)\\sclass="(?P<classname>.*?)">.*?</(\\1)>')
print(pattern.search(string).group(3))

def fun(m):
    return 'after sub'+m.group('classname')
print(pattern.sub(fun, string))

7.贪婪匹配

import re
string='<h1 class="test1">HelloWorld</h1>'
#贪婪匹配
pattern=re.compile(r'<.\d\sclass=.*>')
print(pattern.search(string).group())
#关闭贪婪匹配
pattern=re.compile(r'<.\d\sclass=.*?>')
print(pattern.search(string).group())

8.综合案例

import requests
import re
def handle_detail_re(content):
    #re.S表示全文匹配
    # item_search=re.compile('ts_solgcont_title">.*?</div>\r\n\t</div>',re.S)
    item_search = re.compile('ts_solgcont_title">.*?<div class="ts_solgcont_bot">.*?</div>', re.S)
    #获取每一条图书的数据
    all_item=item_search.findall(content)
    #匹配书名
    title_search=re.compile('target="_blank">(.*?)</a>')
    #匹配作者
    author_search=re.compile('<p>作者(.*?)</p>')
    for item in all_item:
        print({
            "title":title_search.search(item).group(1),
            "author":author_search.search(item).group(1),
        })


def main():
    header={
        "User-Agent":"Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 CrKey/1.54.250320 Edg/135.0.0.0"
    }

    booktype=['java','python','c']
    for key in booktype:
        url='http://www.cmpedu.com/so.htm?&KEY={}'.format(key)
        response=requests.get(url,headers=header)
        handle_detail_re(response.text)

if __name__ == '__main__':
    main()

三.example3下的

安装beautifulsoup4的指令:pip3 install beautifulsoup4
beautifulsoup4:Beautiful Soup(bs4)是一个用于从HTML或XML文件中提取数据的Python库。

1.获取节点

from bs4 import BeautifulSoup
html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p >
<p class="story">Once upon a time there were three little sisters; and their names were
<!-- Elsie -->,
 and
;
and they lived at the bottom of a well.</p >
<p class="story">...</p >
"""
#参数1:html代码片段
# 参数2:解析器
soup=BeautifulSoup(html,'lxml')
#获得标题
print(soup.title)
#获得头标记
print(soup.head)
#获得体标记
print(soup.body)
#获得标题元素内容
print(soup.title.string)
#获得标记名称
print(soup.title.name)
#默认的模式下只能匹配第一个节点,其他节点会被忽略
print(soup.p)

相关文章:

  • 剑指Offer(数据结构与算法面试题精讲)C++版——day7
  • 深度解析 n8n:强大的开源工作流自动化平台
  • 【12】RUST智能指针
  • 看雪 get_pwn3(2016 CCTF 中的 pwn3)
  • 25统计建模半自动化辅助排版模板及论文排版格式要求
  • 【Easylive】视频删除方法详解:重点分析异步线程池使用
  • 【HTML-CSS】
  • c++概念—内存管理
  • 【自记录】ubuntu命令行下禁用指定声卡
  • flutter修改 Container 中的 Text 和 Image 的样式
  • 2025年招投标行业的深度变革:洞察趋势,把握未来
  • ES6 新增特性 箭头函数
  • 二分查找算法
  • 飞机的平衡条件及保持平衡的方法
  • C# 操作 Redis
  • 【Prompt实战】结构化 Prompt 高质量模板
  • 4-数据类型
  • 2025年- H1-Lc109-160. 相交列表--java版
  • 前端使用proxy穿透后查看真实请求地址方法
  • WD5208 集成了 500V 高压 MOSFET 和高压启动电路,输出电压为 12V
  • 湖南网站制作/成都seo培
  • 湖北网站建设营销qq/seo实战技巧100例
  • 如何制作网站和软件/清远今日头条新闻
  • 中国制造网外贸站/建设网站
  • 深圳做棋牌网站建设哪家服务好/网站推广的平台
  • 莘县网站建设费用/怎么让百度搜索靠前