鱼C论坛

 找回密码
 立即注册
查看: 1239|回复: 7

[已解决]爬取某个房源网站房源列表页,想获取每个房源的链接

[复制链接]
发表于 2019-9-17 20:51:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想用Python中使用CSS选择器或者xpath获取房源列表中房源的链接,但是有些房源的标签下既有房源的链接,还有房子全景图的链接,该怎么处理才能只选取房源的链接!!我用CSS选择器做的如下,但是会连通全景图的标签一起提取出来
response.css('div.build_des.dingwei div.build_pic div.dingwei a::attr(href)').extract()
选取的结果如下:
['/newhouse/property_330181_526025065_info.htm', '/newhouse/property_33_511129767_info.htm', '/newhouse/property_33_82149869_info.htm', '/newhouse/property_33_
82149869_view720list.htm', '/newhouse/property_33_1161890609_info.htm', '/newhouse/property_33_1161890609_view720list.htm', '/newhouse/property_33_1166145658_i
nfo.htm', '/newhouse/property_330184_879503341_info.htm']


一段包含两种链接的代码:
<div class="build_des dingwei">
                            <div class="build_pic">
                                    <div class="dingwei">
                                            <a href="/newhouse/property_33_1161890609_info.htm" target="_blank"><img src="/upload/newhouse/propertyinfo/mainlogo/20180611/15287064252420_150x113.jpg" title="海土字17241号" width="140" height="105"></a>
                                            <span><a href="/newhouse/property_33_1161890609_view720list.htm" target="_blank"><div class="quanjing colorwht aligc tidt16">全景</div></a></span>
                                    </div>
最佳答案
2019-9-18 06:29:37
  1. from lxml import etree
  2. text = '''
  3. [color=RoyalBlue]<div class="build_des dingwei">
  4.    <div class="build_pic">
  5.    <div class="dingwei">
  6.          <a href="/newhouse/property_33_1161890609_info.htm" target="_blank">
  7.               <img src="/upload/newhouse/propertyinfo/mainlogo/20180611/15287064252420_150x113.jpg"
  8.               title="海土字17241号" width="140" height="105">
  9.           </a>
  10.          <span>
  11.              <a href="/newhouse/property_33_1161890609_view720list.htm" target="_blank">
  12.              <div class="quanjing colorwht aligc tidt16">全景</div>
  13.              </a>
  14.          </span>
  15.     </div>
  16. </div>
  17. </div>[/color]

  18. '''
  19. html = etree.HTML(text)
  20. result = html.xpath('//div[@class="build_des dingwei"]//div//div//a/@href')
  21. print(result[0])
  22. result = html.xpath('//div[@class="build_des dingwei"]/div/div/a/@href')
  23. print(result[0])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-17 21:01:59 From FishC Mobile | 显示全部楼层
一个有span标签,一个没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-17 21:05:59 | 显示全部楼层
wp231957 发表于 2019-9-17 21:01
一个有span标签,一个没有

我知道啊,但是不知道为啥会把span元素下a元素的href也取到了,不知道哪里错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-17 21:07:40 From FishC Mobile | 显示全部楼层
哈哈可克 发表于 2019-9-17 21:05
我知道啊,但是不知道为啥会把span元素下a元素的href也取到了,不知道哪里错了

换bs4试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 06:29:37 | 显示全部楼层    本楼为最佳答案   
  1. from lxml import etree
  2. text = '''
  3. [color=RoyalBlue]<div class="build_des dingwei">
  4.    <div class="build_pic">
  5.    <div class="dingwei">
  6.          <a href="/newhouse/property_33_1161890609_info.htm" target="_blank">
  7.               <img src="/upload/newhouse/propertyinfo/mainlogo/20180611/15287064252420_150x113.jpg"
  8.               title="海土字17241号" width="140" height="105">
  9.           </a>
  10.          <span>
  11.              <a href="/newhouse/property_33_1161890609_view720list.htm" target="_blank">
  12.              <div class="quanjing colorwht aligc tidt16">全景</div>
  13.              </a>
  14.          </span>
  15.     </div>
  16. </div>
  17. </div>[/color]

  18. '''
  19. html = etree.HTML(text)
  20. result = html.xpath('//div[@class="build_des dingwei"]//div//div//a/@href')
  21. print(result[0])
  22. result = html.xpath('//div[@class="build_des dingwei"]/div/div/a/@href')
  23. print(result[0])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 06:30:16 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 10:19:54 | 显示全部楼层
a_hrdf = html.xpath('//div[@class="dingwei"]/a/@href')

span_a_href = html.xpath('//div[@class="dingwei"]/span/a/@href')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-20 10:54:18 | 显示全部楼层
钻了牛角尖了,老想着用CSS选择器处理,后来用了xpath已经解决了,没来的及回复,谢谢各位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 02:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表