简体   繁体   中英

what's wrong with this python code

This is a code with Web crawler. I'm a beginer in learning python.So i don't know how to solve. It seems wrong with search()

# -*- coding:utf-8 -*-
import urllib,urllib2,re
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)
            request = urllib2.Request(url)
            response = urllib2.urlopen(request)
            #print response.read().decode('utf-8')
            return response
        except urllib2.URLError,e:
            if hasattr(e,'reason'):
                print u'连接百度贴吧失败,错误原因',e.reason
                return None
    def getTitle(self):
        page = self.getPage(1)
        pattern = re.compile('<h3 class.*?px">(.*?)</h3>',re.S)
        result = re.search(pattern,page)
        if result:
            print result.group(1)
            return result.group(1).strip()
        else:
            return None
baseURL = 'http://tieba.baidu.com/p/4095047339'
bdtb = BDTB(baseURL,1)
bdtb.getTitle()

This will raise a TypeError: expected string or buffer because you are passing the object returned from urllib2.urlopen(request) to re.search() when it requires an str .

If you change the return value from:

return responce  # returns the object

to one that returns the text contained in the request:

return responce.read()  # returns the text contained in the responce

Your script works and after executing it returns:

广告兼职及二手物品交易集中贴

Additionally , since you're working with Python 2.x you might want to change you object from class BDTB: to class BDTB(object) in order to use new style classes .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM