首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何获得每个企业列表的所有解析数据,并使其在CSV文件中对齐?

如何获得每个企业列表的所有解析数据,并使其在CSV文件中对齐?
EN

Stack Overflow用户
提问于 2015-10-13 17:59:44
回答 1查看 32关注 0票数 0

我正在使用Ubuntu14.04.3和Python2.7.6来解析一个Yellowpages.com,YP,Apartments页面。我使用的是lxml和xpath。YP页面似乎具有相同的布局。每一页的中心列出了每套公寓。每个中心公寓都有一个索引号。每页有30个索引公寓。其他公寓在页面的顶部、底部和右侧列出,看起来像是广告,对解析没有兴趣。我解析了页面,获得了列出的公寓的每一项的计数。如果有30个编号的公寓,我会得到不同的项目计数,这似乎是有问题的。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lenIdxBusNames = 30
lenBusinessNames = 32
lenStreets = 30
lenPageHrefs = 15.

我将项目/元素写入CSV中的行。BusinessName和pageHref列未对齐。BusinessName列上移了一行。只有15个pageHrefs,这意味着缺少一些。它们不是与其他项目保持在同一行中,而是在该列的前16行中列出。一些搜索路径包括:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idxBusNames =         tree.xpath('//h3[@class="n"]/text()'), 
businessNames =       tree.xpath('//h3/a[@class="business-name"]/text()'), 
streets =             tree.xpath('//p[@class="adr"]/span[1]/text()') and 
pageHrefs =           tree.xpath('//a[@class="track-visit-website"]/@href')

我发现了使用Firefox firebug的xpath。更多细节在附件中。

谢谢你的帮助,鲍勃

EN

回答 1

Stack Overflow用户

发布于 2015-10-13 22:45:43

基于我的评论:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
from lxml import etree

url="""http://www.yellowpages.com/search?search_terms=apartment"""
url+="""&insert geo params here"""

r = requests.get(url)
h = etree.HTMLParser()

tree = etree.fromstring(r.text,h)

xp_info_nodes = """//div[@class='info']"""

xp_id = """h3[@class='n']/text()"""
xp_name = """h3[@class='n']/a[@class='business-name']/text()"""
xp_adr = """div[@class='info-section info-primary']/p[@class='adr']/span[1]/text()"""
xp_link = """.//a[@class='track-visit-website']/@href"""


info_nodes = tree.xpath(xp_info_nodes)
all_data = []

for node in info_nodes:

    #mandatory_nodes
    data = [
            node.xpath(xp_id),
            node.xpath(xp_name),
            node.xpath(xp_adr),

        ]

    #insert some function to clean up data[0] here.  its returning weird strings.

    ldata = len(data)
    data = [d for d in data if d]
    if len(data) != ldata:
        continue

    #optional
    optional_data = [
        data.append(node.xpath(xp_link))
    ]

    optional_data = [o for o in optional_data]

    all_data.append(data + optional_data)

for row in all_data:
    """print a line of your csv"""
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33109493

复制
相关文章
为什么我写不出面向对象的代码
举个栗子,比如之前项目组做的付款业务,这里面包含了A付款,B付款,C付款,D付款等模块。
Lvshen
2022/12/05
1.2K0
为什么我写不出面向对象的代码
为什么我用了Redis之后,系统的性能却没有提升
很多时候,我们在面对一些热点数据的时候,通常会选择将热点数据放到redis中,以减少数据库的查询,减轻数据库的压力。但是如果我们使用redis的方式不对,那么可能导致系统的性能不升反降。
Java进阶之路
2022/08/03
1.9K0
为什么我用了Redis之后,系统的性能却没有提升
使用两年之后,我为什么卸载了Istio?
作者 | Eric Fossas 译者 | 刘雅梦 策划 | Tina 在生产中使用了 Istio 近两年之后,我们要和它说再见了。 服务网络大战正在肆虐。现在我把票投给了 Linkerd。 服务网格提供了微服务之间的流量监控,包括服务通信的映射和在它们之间生成的 HTTP 状态码。通过添加服务网格,你可以在服务间添加 mTLS,或者换句话说,可以在服务间添加加密的 HTTP 通信。 在我看来,这两个工具几乎对所有人都很有用。许多服务网格都提供了诸如流量分割、重试、超时等高级功能。我很少相信这些功能是有用的
深度学习与Python
2023/04/01
7470
使用两年之后,我为什么卸载了Istio?
【Verilog我思我用】-向量部分选择
在《AXI_lite代码简解-AXI-Lite 源码分析》 中,查看AXI_lite的源代码之后有一个比较陌生的“面庞”,如下:
碎碎思
2021/02/01
6980
【Verilog我思我用】-向量部分选择
在设计了100个弹框之后,这些是我的心得
什么是弹框? 弹框是一种交互方式,用作提醒,做决定或者解决某个任务。弹框一般包含一个蒙版,一个主体及一个关闭入口,常见于网页及移动端。其好处是让用户更聚焦,且不用离开当前页面,更快更容易完成任务。由于
用户1667431
2018/04/18
1.6K0
在设计了100个弹框之后,这些是我的心得
为什么我的BERT不行?
这节只列举问题,思路放下一章。这里是给大家去定位问题的思路,通过这些渠道能发现一些问题,而不是对问题束手无策了。
lyhue1991
2023/02/23
1.2K0
为什么我的BERT不行?
为什么我在公司里访问不了家里的电脑?
上篇文章「为什么我们家里的IP都是192.168开头的?」提到,因为IPv4地址有限,最大42亿个。为了更好的利用这有限的IP数量,网络分为局域网和广域网,将IP分为了私有IP和公网IP,一个局域网里的N多台机器都可以共用一个公网IP,从而大大增加了"可用IP数量"。
小白debug
2023/02/17
2.1K0
为什么我在公司里访问不了家里的电脑?
【ML】支持向量机是什么?我为什么要使用它?
支持向量机是一种有监督的机器学习算法,可以用于分类或回归问题。它使用一种称为核技巧的技术来转换数据,然后根据这些转换在可能的输出之间找到一个最佳边界。简单地说,它做一些非常复杂的数据转换,然后根据定义的标签或输出来划分数据。
陆勤_数据人网
2018/12/27
2K0
【ML】支持向量机是什么?我为什么要使用它?
[插件化开发] Poc之后,我选择放弃OSGI
我选择放弃该方案,使用Servlet 3.0提供的热插拔来实现插件模式,只是需要重新加载应用上下文,因此,建议各位部署多实例节点,在升级服务时,采用灰度发布来降低影响。
Isaac Zhang
2019/10/24
1.3K0
为什么我应该使用指针而不是对象本身
对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。
ClearSeve
2022/02/10
1.4K0
一切皆对象,那是我的对象
刚才那些就是函数的基本知识了。我们来让你的知识更进一步。在 Python 中我们可以在一个函数中定义另一个函数:
Python知识大全
2020/02/21
5220
我为什么读博,以及我为什么不读博?
研究生三年后,毕业生都做出了自己的选择,一部分人就业,一部分人选择继续深造,不同的路径,同样的都是在探索自己的生涯之路。很多人都会比较一下毕业后直接工作和读博这三年内到底有何不同?下面就彻底晒晒。
用户3578099
2020/11/30
1.1K0
我为什么读博,以及我为什么不读博?
为什么我要写自己的框架?
其实说白了框架就是使用别人造好的轮子。在软件开发里面就是command+C/command+V。
哲洛不闹
2018/09/18
1.3K0
为什么我要写自己的框架?
为什么我的Redis这么“慢”?
Redis 作为内存数据库,拥有非常高的性能,单个实例的 QPS 能够达到 10W 左右。
架构师修行之路
2020/08/20
3.7K0
我的KT库之—–对象池
http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html
全栈程序员站长
2022/07/05
3360
我的KT库之—–对象池
我在 MySQL 的那些年
作者:赖铮(Allen Lai),前 MySQL 官方团队成员,专注数据库内核开发近二十年,先后就职于达梦,Teradata,北大方正以及 MySQL InnoDB 存储引擎团队,是达梦数据库内核,方正 XML 数据库,以及 MySQL InnoDB 的 GIS 支持,透明加密功能的主要开发者。现任腾讯 TEG 云架构平台部数据库团队专家工程师,负责腾讯云 CDB 数据库内核的研发。 面试 2012 年的春天,阳光明媚,鸟语花香,我正在张江的一栋橙黄色的大楼里跟我的小伙伴们一起奋力
腾讯技术工程官方号
2020/11/05
6930
第九期|不是吧,我在社交媒体的照片也会被网络爬虫?
顶象防御云业务安全情报中心监测到,某社交媒体平台遭遇持续性的恶意爬虫盗取。被批量盗取用户信息和原创内容,经分类梳理和初步加工后,被黑灰产转售给竞争对手或直接用于恶意营销。由此不仅给社交媒体平台的数字资产带来直接损失,影响用户对社交媒体平台的信任,更破坏了内容产业的健康发展。
顶象技术
2022/11/09
7930
第九期|不是吧,我在社交媒体的照片也会被网络爬虫?
我在微软的面试经历
大约2-3个月前,我在Linkedin上看到微软员工的一系列消息,是与微软为SDE暑期实习生招聘预赛有关。我对此非常兴奋,不想错过这次机会。
ACM算法日常
2020/11/11
1K0
我在微软的面试经历
我说我为什么抽不到SSR,原来是这段代码在作祟...
元素被选中的机会并不相等,而是由相对“权重”(或概率)被选中的,是偏心的,这就是加权随机。
机智的程序员小熊
2023/03/02
1.3K0
我说我为什么抽不到SSR,原来是这段代码在作祟...
见证——写在我的台式机光荣退役之后
2009年8月1日我到厦门大正电脑城入手小黑本本,然后回家里将我那台伴随我4年半的台式机硬盘里的数据传到我的本本之后,宣告了我的台式机从此退役,由小黑接任它的历史使命,继续见证我今后生活的点点滴滴…
SAP梦心
2022/05/10
7060

相似问题

为什么我的对象会被分离?

24

为什么我的函数会被调用两次?

41

为什么我的onResume会被调用两次?

199

为什么我的函数会被调用两次?

30

为什么我的函数会被两次调用?

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文