Python运用正则表达式爬取糗事百科

Python运用正则表达式爬取糗事百科

一、开头
最近开始学习python爬虫,了解了python中一些强大的库,BeautifulSoup,requests,urllib等等,本文将使用正则表达式与requests库爬取糗事百科热门段子
二、分析网页信息
首先肯定是访问糗事百科主页(https://www.qiushibaike.com/),在这里使用的是requests库,代码如下:
    url = "https://www.qiushibaike.com/
    response = requests.get(url)
    print(response.text) 
嗯,使用requests确实就这么简单。可以看到终端上打印出了一大堆源码,很明显这里看源码太麻烦,我们可以去浏览器里看啊,我用的是Chrome,先分析一个段子的组成,有头像,昵称,内容,好笑数 如图我们对其元素进行审查,可以快速定位到其标签位置,如图:
三、正则表达式进行匹配
如果对正则表达式不太熟悉,可以参考 正则表达式

#### 1. 获取昵称

  • 原文标签

    <a href="/users/33234810/" target="_blank" onclick="_hmt.push(['_trackEvent','web-list-author-text','chick'])">
    <h2>
    Dr.fuckin…
    </h2>
    • 正则表达式
exp = re.compile(r'<a.*?web-list-author-text.*?>\s*?<h2>\s*?(.*?)\s*?</h2>')
  res = re.findall(exp,response.text)  

#### 到这你会发现,只是个获取昵称而已,竟然这么麻烦,中间还出现了好多\s,*?这样的结构
- \s 匹配空白字符(\t\n..)
- * 表示匹配0次或者无限次
- ? 表示匹配一次或者无限次
- *? 非贪婪模式,表示尽量少的匹配

2. 获取内容
  • #### 原文标签
   <span>-><div class="content"->
    <a href="/article/119442335" target="_blank" class="contentHerf" onclick="_hmt.push(['_trackEvent','web-list-content','chick'])">
    <div class="content">
    <span>


    朋友小时候梦游。我们去他家住。早上起来看到他闭眼睛向厕所走。朋友回来后不久后听见他妈妈吼道,:这小兔崽子,旁边就是马桶,就向地上尿。<br/><br/>哈哈哈哈哈哈哈哈哈哈哈哈哈等会我先笑一会

    </span>  
  • 正则表达式
        exp1 = re.compile(r'<div.*?content">\s*?<span>\s*?(.*?)\s*?</span>')
        res1 = re.findall(exp1,response.text)
        print(res1)
细心观察会发现上面出现用了好多\s,因其在每个标签结尾处都使用了<br>进行换行,所以我们在匹配时必须要注意进行匹配,但会发现还是好麻烦,一个标签到下一个标签至少就有一个换行符,\s只针对空白字符。仔细想想 匹配符 .好像是可以匹配除\n其他以外所有字符,但在DOTALL模式下也可以匹配\n.
3. DOTALL模式匹配昵称,内容
  • 正则表达式
 exp2 = re.compile(r'<div class="article block.*?>.*?<h2>(.*?)</h2>.*?<span>(.*?)</span>',re.DOTALL)
    res2 = re.findall(exp2,response.text)
    print(res2) 

未完待续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值