python爬虫--xpath方式清洗数据,class内容中有空格,清洗失败怎么办?

python爬虫--xpath方式清洗数据,清洗失败?(class内容中有空格)

目标:爬取类似下图中帖子的图片

步骤一、找到该帖子的源代码

<div class="threadlist_lz clearfix">
       <div class="threadlist_title pull_left j_th_tit  member_thread_title_frs "> 
             <a rel="noreferrer" href="/p/6739292728" title="为什么现在培训班出来的Java学员都找不到工作?" target="_blank" class="j_th_tit ">为什么现在培训班出来的Java学员都找不到工作?</a>

 步骤二、爬取网页内容,使用xpath方法获取href的内容

    # 构造URL
    def tiebaSpider(self):
        for page in range(self.beginPage,self.endPage+1):
            pn = (page-1)*50
            wo = {'pn': pn, 'kw': self.tiebaname}
            word = urllib.parse.urlencode(wo)
            myurl = self.url + word
            self.loadPage(myurl)

    # 爬取页面内容
    def loadPage(self, url):
        req = request.Request(url, headers=self.ua_head)
        # req = request.Request(url)
        data = request.urlopen(req).read()

        htm = etree.HTML(data)
        links = htm.xpath('//div[@class="threadlist_lz clearfix"]/div/a/@href')

打印links,发现列表是空白的。

语法正确,为什么没有值呢?

发现,【class="threadlist_lz clearfix"】class内容包含空格,

(之前使用selenium做自动化测试,如果class内有空格,将空格变为.就可以定位到了)

将空格修改为【.】尝试了一下,仍然没有数据,尝试失败。。。。

后来经人提醒,可能是headers有问题。

那就试试直接发送请求,将自定义的请求头【headers=self.ua_head】代码删除,

即变更为【req = request.Request(url)】发送请求。

执行之后,links列表取到了正确的url值。ok问题解决。

但是,不带headers,短期内发送多次请求的话,IP容易被封。。。。

或许可以试试换个headers。

于是百度“常见的浏览器请求头”,尝试了各种不同浏览器的请求头,发现IE浏览器的可以使用。

例如:

self.ua_head = {'User-Agent': 'User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'}

这样,问题就解决了。

总结一下,有两种方法:

  • 方法一:发送请求时,不带请求头headers
  • 方法二:带headers发送请求,headers内容使用IE浏览器的请求头信息,亲测可用

注:文章内容主要是记录学习过程中遇到的一些问题,以及解决方法。留个记录,同时分享给有需要的人。如有不足之处,欢迎指正,谢谢! 

猜你喜欢

转载自blog.csdn.net/elsa_yxy1984/article/details/106904441