Python数据抓取基本概念

2024-04-27 23:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄清楚当你看不到HTML(即DOM抓取)时,数据抓取是如何工作的。在

我一直在尝试编写一个简单的Python代码来自动检索看到某个特定广告的人数:该部分显示“本周有3365人浏览了彼得的住处”

一开始我试着看看它是否显示在HTML代码中,但是找不到它。做了一些研究,发现并不是所有的东西都在代码中,因为浏览器可以通过JavaScript或其他我还不太懂的语言来处理。然后我检查了元素,意识到我需要使用Python库'retrieve'和'lxml.html'. 所以我写了这个代码:

import requests
import lxml.html

response = requests.get('https://www.airbnb.co.uk/rooms/501171')
resptext = lxml.html.fromstring(response.text)
final = resptext.text_content()
finalu = final.encode('utf-8')

file = open('file.txt', 'w')

file.write(finalu) 

file.close()

这样,我就得到了一个包含网页中所有文本的代码,但不是我要查找的文本!这是个神奇的数字3365。在

所以我的问题是:我如何得到它?我想也许我没有使用正确的语言来获得DOM,也许它是用JavaScript完成的,而我只使用lxml。但是,我不知道。在


Tags: 代码textimport语言responsehtmljavascriptrequests
2条回答

所以首先你需要弄清楚这段代码是否有任何唯一的标记。所以如果你看看你的HTML树

html > body > #room > ....... > #book-it-urgency-commitment > div > div > ... > div#media-body > b

您需要的数据存储在“b”标记中。我不确定是否要使用lxml,但我通常使用beauthoulsoup进行刮擦。在

你可以参考http://www.crummy.com/software/BeautifulSoup/bs4/doc/这很直接。在

在页面加载后,您正在查看的DOM元素将被更新,该元素看起来像一个AJAX调用,具有以下请求URL:

https://www.airbnb.co.uk/rooms/501171/personalization.json

如果获得该URL,它将返回以下JSON数据:

^{pr2}$

如果您在“列出活动数据”下查找,您将找到您要查找的信息。将/personalization.json附加到任何文件室URL似乎都会返回此数据(目前)。在

根据用户代理问题更新

看起来他们是基于用户代理过滤对这个URL的请求。为了解决这个问题,我必须在urllib请求上设置用户代理:

import urllib2
import json


headers = { 'User-Agent' : 'Mozilla/5.0' }
req = urllib2.Request('http://www.airbnb.co.uk/rooms/501171/personalization.json', None, headers)
json = json.load(urllib2.urlopen(req))

print(json['listing_activity_data']['week']['unique_views'])

相关问题 更多 >