标题:求助:re.search()搜索结果和源码对不上
只看楼主
findstory
Rank: 2
等 级:论坛游民
帖 子:8
专家分:20
注 册:2020-2-2
结帖率:0
 问题点数:0 回复次数:0 
求助:re.search()搜索结果和源码对不上
最近在学习python,搜集资料时发现一个牛人,想follow,结果一开始就遇到问题了。
在一篇介绍抓取百度贴吧信息的帖子(https://)中遇到了无法解释的问题。可能是版本的原因,他提供的源码问题比较多(适用于2.7,这里用的是3.8),
我做了一定改动后可以运行,bdtb.getTitle()结果是对的,可是bdtb.getPageNum()结果和网页源码对不上。


我的问题是明明网页源码中回复贴数是4685,页数是34,怎么程序返回的是130和5,非常奇怪,请大神帮忙看看什么情况。
程序代码:
# -*- coding:utf-8 -*-
import urllib
import re
import requests

#百度贴吧爬虫类
class BDTB: 
    #初始化,传入基地址,是否只看楼主的参数
    def __init__(self,baseUrl,seeLZ):
        self.baseURL = baseUrl
        self.seeLZ = '?see_lz='+str(seeLZ)

 
    #传入页码,获取该页帖子的代码
    def getPage(self,pageNum):
        try:
            url = self.baseURL+ self.seeLZ + '&pn=' + str(pageNum)
            #response = urllib.request.urlopen(url)
            response=requests.get(url)
            #response = urllib(request)
            #print(response.text)
            return response
        except urllib.error.URLError as e:
            if hasattr(e,"reason"):
                print(u"连接百度贴吧失败,错误原因",e.reason)
                return None
    #获取帖子标题
    def getTitle(self):
        page = self.getPage(1)
        pattern = ('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
        #page=str(page)
        result = re.search(pattern,page.text)
        #print(result)
        if result:
            print(result.group(1))  #测试输出
            return result.group(1).strip()
        else:
            return None
    #获取帖子一共有多少页
    def getPageNum(self):
        page = self.getPage(1)
        pattern = ('<li class="l_reply_num".*?>(.*?)</span>页</li>',re.S)
        #pattern = ('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
        result = re.search(pattern,page.text)
        print(result)
        if result:
            print(result.group(1))  #测试输出
            return result.group(1).strip()
        else:
            return None         
    def getContent(self,page):
        pattern = ('<div id="post_content_.*?>(.*?)</div>',re.S)
        items = re.findall(pattern,page.text)
        #print(items.group(1))
        #for item in items:
        #print item
        #print(self.tool.replace(items[1]))  
                     
baseURL = 'http://tieba.baidu.com/p/3138733512'
bdtb = BDTB(baseURL,1)
bdtb.getPageNum()
#bdtb.getTitle()
#bdtb.getContent(bdtb.getPage(1))


[此贴子已经被作者于2020-2-2 21:13编辑过]

搜索更多相关主题的帖子: return print page pattern result 
2020-02-02 21:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499074-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.257187 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved