飞谷云

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 2346|回复: 6

关于电商比价爬虫无法通过xpath获取购车地点信息的问题

[复制链接]

1

主题

5

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2016-1-27 13:13:49 | 显示全部楼层 |阅读模式
本帖最后由 Arkie 于 2016-1-27 13:19 编辑

刘老师,爬虫遇到问题,暂时无法解决
问题1:我通过对xpath的相对路径爬取,代码如下
但无法获得代表省市的中文字符的原因是什么,是不是关于网页省市的中文是通过查表获得的吗?
如果不能直接抓取,该如何正确获得这两个标签?
  1. addr = hxs.select("//div[@class='price-item-bd']/ul[@class='price-item-info fn-clear']/li[@class='grid-2-2']/div[@class='txcon addr']/text()").extract()
复制代码

问题2:新车实际成交价(deal_price)是通过计算求和算出来的吗?未在网页找到直接信息


12.png
22.png
回复

使用道具 举报

1

主题

5

帖子

31

积分

新手上路

Rank: 1

积分
31
 楼主| 发表于 2016-1-27 13:57:39 | 显示全部楼层
本帖最后由 Arkie 于 2016-1-27 14:00 编辑

刚搜索了下全国省市代码,还真的有所发现
pid代表省,cid代表市,xid代表县
14.png
13.png
回复 支持 反对

使用道具 举报

7

主题

21

帖子

69

积分

版主

Rank: 7Rank: 7Rank: 7

积分
69
发表于 2016-1-27 19:49:15 | 显示全部楼层
你好,关于第二个问题:
问题2:新车实际成交价(deal_price)是通过计算求和算出来的吗?未在网页找到直接信息
这个我看了一下hive的 stg_price表,里面是有这个字段,这个字段在页面上是没有的,不用抓取。
stg_price.deal_price 空着就可以,在 rpt_price表中,deal_price的值,是stg_price表中几个价格
字段的合计,这个用 HQL 计算。python爬虫不用处理。
回复 支持 反对

使用道具 举报

7

主题

21

帖子

69

积分

版主

Rank: 7Rank: 7Rank: 7

积分
69
发表于 2016-1-27 19:51:33 | 显示全部楼层
本帖最后由 刘老师 于 2016-1-27 19:52 编辑

第一个问题,省市的抓取,我看你黑底的图片上,不是已经可以拿到了?
addr = hxs.select("//div[@class='price-item-bd']/ul[@class='price-item-info fn-clear']/li[@class='grid-2-2']/div[@class='txcon addr']/text()").extract()
这种 xpath 的语法,写的太深了, //div/div/div  这种层数太深了应该不支持,我没有这样写过。
建议可以分开来两次   //div/div  这样一次,先把内容打出来看看。便于调试。要么汉字是不是忘了写 .encode('utf-8') 了?

回复 支持 反对

使用道具 举报

1

主题

5

帖子

31

积分

新手上路

Rank: 1

积分
31
 楼主| 发表于 2016-1-28 11:01:02 | 显示全部楼层
本帖最后由 Arkie 于 2016-1-28 11:18 编辑
第一个问题,省市的抓取,我看你黑底的图片上,不是已经可以拿到了?
addr = hxs.select("//div[@class='price-item-bd']/ul[@class='price-item-info fn-clear']/li[@class='grid-2-2']/div[@class='txcon addr']/text()").extract()
这种 xpath 的语法,写的太深了, //div/div/div  这种层数太深了应该不支持,我没有这样写过。
建议可以分开来两次   //div/div  这样一次,先把内容打出来看看。便于调试。要么汉字是不是忘了写 .encode('utf-8') 了?
  1.             addr = hxs.select("//div[@class='price-item-bd']/ul[@class='price-item-info fn-clear']//*/text()").extract()
  2.             print len(addr)
  3.             for each in addr:
  4.                 try:
  5.                     print each
  6.                 except:
  7.                     print each.encode('utf-8')
复制代码
我是直接打印调试所以可以不加.encode('utf-8'),等文件输出了再加上

如上面,我往前缩进了几层xpath,把全部txt内容打出来,但在(购车地点:)后面没有省市的txt,我查看了,除了省市,其他都有了
23.png
回复 支持 反对

使用道具 举报

1

主题

5

帖子

31

积分

新手上路

Rank: 1

积分
31
 楼主| 发表于 2016-1-30 09:49:34 | 显示全部楼层
本帖最后由 Arkie 于 2016-1-30 10:09 编辑

20160130最新进展,网上查资料后,觉得省市应该是js写的,昨晚尝试了下python的selenium包,调用chromedriver,简单调试后,代码如下
  1.             prov_list = []
  2.             city_list = []
  3.             web = webdriver.Chrome()
  4.             web.get(response.url)
  5.             addr_xpa = "//li[@class='price-item'][{0}]/div[@class='price-item-bd']/ul[@class='price-item-info fn-clear']/li[@class='grid-2-2']/div[@class='txcon addr']"
  6.             for i in range (car_No):
  7.                 addrs = web.find_element_by_xpath(addr_xpa.format(str(i+1)))
  8.                 addrs = addrs.text
  9.                 prov_list.append(addrs.split(',')[0])
  10.                 if ',' in addrs:
  11.                     city_list.append(addrs.split(',')[1])
  12.                 else:
  13.                     city_list.append('')
  14.             web.close()
复制代码


结果到时能爬到省市,但是每次爬网页都要打开chrome浏览器,爬虫速度很慢,1分钟只能爬10个左右网页,加起来的车辆信息不到100条txt!很不理想,还需要优化
34.png
回复 支持 反对

使用道具 举报

0

主题

1

帖子

44

积分

新手上路

Rank: 1

积分
44
发表于 2016-3-13 01:04:22 | 显示全部楼层
本帖最后由 小十一狼 于 2016-3-13 04:22 编辑
Arkie 发表于 2016-1-30 09:49
20160130最新进展,网上查资料后,觉得省市应该是js写的,昨晚尝试了下python的selenium包,调用chromedriv ...

请问楼主最后是怎么解决这个问题的?我试了selenium模块,可以做,但是效率太低,而且还要打开浏览器,这样不太好吧
回复 支持 反对

使用道具 举报

本版积分规则

QQ|Archiver|手机版|小黑屋|Feigu Cloud Inc. ( 沪ICP备12036109号

GMT+8, 2018-11-21 19:46 , Processed in 0.044570 second(s), 32 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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