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

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

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

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

为什么现在培训班出来的Java学员都找不到工作?

步骤二、爬取网页内容,使用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浏览器的请求头信息,亲测可用

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

原文链接:https://blog.csdn.net/elsa_yxy1984/article/details/106904441

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值