【问题标题】:Itertools within web_crawler giving wrong triplesweb_crawler 中的 Itertools 给出错误的三元组
【发布时间】:2017-05-19 18:21:20
【问题描述】:

我编写了一些代码来解析来自 craigslist 的名称、链接和价格。当我打印结果时,这些被作为列表刮掉了。我尝试像下面粘贴的代码一样获得解决方法,但是它给出了错误的三元组,特别是当一个值为 none 时,它​​会从另一个三元组中获取下一个可用值,依此类推。因此,在这种情况下它是没有用的。希望我对如何完成这项工作有任何建议,无论是 Itertools 还是任何其他方法。

import requests
from lxml import html
from itertools import zip_longest

Page_link="http://bangalore.craigslist.co.in/search/rea?s=120"
def parsing_craigslist(url):
    response = requests.get(url)
    tree = html.fromstring(response.text)
    title = tree.xpath("//p[@class='result-info']//a[contains(concat(' ', @class, ' '), ' result-title ')]/text()")
    link = tree.xpath("//p[@class='result-info']//a[contains(concat(' ', @class, ' '), ' result-title ')]/@href")
    price = tree.xpath("//p[@class='result-info']//span[@class='result-price']/text()")
    for i,j,k in zip_longest(title,link,price,fillvalue=None):
        print(i,j,k)

parsing_craigslist(Page_link)

【问题讨论】:

  • 看到它们是分开的,比如title 在一行然后link 在另一行然后price 在第三行?只需使用三个print 语句,或使用pprint
  • 感谢 Tadhg McDonald-Jensen 的回答。我非常抱歉未能阐明输出应该如何。现在,你可以看到了。
  • 我已经尝试过你的抓取,它有效,我使用 zip :for i,j,k in zip(title,link,price):你的问题是什么?
  • 感谢 Tiny.D 的回答。该页面包含 120 条记录,使用 zip 我得到了 82 条记录。 Zip 函数错误地修补了潜在客户,因为当它看到 (title,link,price) 中的任何一个值丢失时,它会获取下一个可用值。如果你看一下,你会看到在 16 日之后记录所有价格与标题和链接不匹配的值。谢谢。
  • 所以问题是缺少某些字段?如果他们是None,你就没有问题,丢失意味着配对不同步。如何确定哪些数据相互对应?

标签: python-3.x web-scraping web-crawler


【解决方案1】:

我倾向于避免在尝试使用zip 匹配来自两个xpath 查询的集合时可能出现的困难,方法是先进行深度优先搜索,然后检查每个条目,如下所示。

import requests
from lxml import html

page = requests.get('http://bangalore.craigslist.co.in/search/rea?s=120').text
tree = html.fromstring(page)
rows = tree.xpath('.//li[@class="result-row"]')
for n, row in enumerate(rows):
    price = row.xpath('.//a/span/text()')[0][1:]
    link = row.xpath('.//p/a')[0]
    title = link.text
    url = link.attrib['href']
    print ('--->', title)
    print (price, ':', url)

【讨论】:

  • 感谢比尔·贝尔先生的回答。这是一个很好的选择。作为一个初学者,我很难理解你脚本中的一件事。在价格中,您使用了 [0][1:]。 [1:] 放在 [0] 之后是什么意思。原谅我的无知。一会儿会接受你的回答。
  • 哦,价格中的数字前面有一个卢比的符号,有点难处理。我们知道货币是什么,所以我安排将其省略。
  • 谢谢先生。
  • 我的荣幸! ---
猜你喜欢
  • 2021-05-25
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多