使用Python进行抓取时丢失数据?

时间:2018-04-06 03:49:56

标签: python python-3.x web-scraping beautifulsoup urllib

UPDATE(2018年4月10日): 所以我发现我的问题是源代码中没有这些信息,这意味着我必须使用Selenium。

更新:
我更多地讨论了这个问题。我做的是反而是喝汤,我只是拿了pageH,把它解码成一个字符串并用它制作了一个文本文件,我发现'{{optionTitle}}'或'{{priceFormat( showPrice,session.currency)}}'来自HTML文件中单独声明的模板部分。我认为这意味着我只是在寻找错误的地方。我仍然不确定,但这就是我的想法。

所以现在我有了一个新问题。在查看了文本文件之后,我现在意识到必要的信息甚至不在pageH中。在它应该向我提供我正在寻找的信息的地方,它反而说:

<bread-crumbs :location="location" :product-name="product.productName"></bread-crumbs> <product-info ref="productInfo" :basic="product" :location="location" :prod-info="prodInfo"></product-info>

这是什么意思?/有没有办法通过这个来获取信息?

原始问题:

我正在尝试从网站上收集产品的名称/价格。我不确定数据是否因为html解析器或BeautifulSoup而丢失,但发生的事情是,一旦我到达我想要的位置,返回的是什么而不是特定的名称/价格是'{ {optionTitle}}'或'{{priceFormat(showPrice,session.currency)}}'。在使用pageH = urllib.request.urlopen()获取网址后,提供此结果的代码为:

pageS = soup(pageH, "html.parser")
pageB = pageS.body
names = pageB.findAll("h4")
optionTitle = names[3].get_text()
optionPrice = names[5].get_text()

因为这不起作用,我试着以不同的方式去寻找更具体的标签,但是重要的代码部分并没有显示出来。它完全消失了。我能做些什么来获得具体的名称/价格,或者这是一项我无法解决的安全措施?

1 个答案:

答案 0 :(得分:2)

{{}}语法看起来像Angular。尝试Requests-HTML进行渲染(使用render())并在之后获取内容。示例如下所示:

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('http://python-requests.org/')
r.html.render()
r.html.search('Python 2 will retire in only {months} months!')['months']

'<time>25</time>'