试图使用python抓取这个网站,但无法获得所需的数据

时间:2016-09-07 02:46:49

标签: python web-scraping

我想在这个网站上找到公司名称https://siftery.com/microsoft-outlook 基本上它列出了一些使用Microsoft Outlook的公司。 我使用了BeautifulSoup,requests,urllib和urllib2,但我仍然没有得到使用Microsoft Outlook的公司的名称,即使在网站的第一页也没有。

我写的代码如下 -

r = requests.get('http://siftery.com/microsoft-outlook')

print(str(r.content))
f=open('abc.txt','w')
f.write(r.content)
f.close()

和看起来很有趣的部分输出是这个 -

({"名称":"营销""处理":"营销""分类&#34 ;: [{" name":" Marketing Automation"," handle":" marketing-automation"," external_id": " tgJ_49k7v4J-wV"," parent_handle":null,"类别":[{"名称":"营销自动化平台&# 34;"处理":"营销自动化平台"" EXTERNAL_ID":" tgJLE9aHoLdneT"" parent_handle&#34 ;:"营销自动化"},

BeautifulSoup也给了我相同的输出,其他库也是如此。 好像" external_id"公司名称在哪里?我不确定。我还尝试使用gedit手动查找公司名称,例如Acxiom,但无法找到任何事件。

2 个答案:

答案 0 :(得分:1)

该网站使用javascript加载信息,这意味着当您执行请求时,DOM将在没有信息的情况下呈现,因为它是异步加载的,对于您应该使用selenium的网站。

注意: 在构建一个scraper之前,您应该查看该站点是否具有禁用CORS的api或端点,在您的情况下,您可以获取向https://siftery.com/product-json/<product_name>发送请求的信息

答案 1 :(得分:0)

数据可直接以JSON格式提供。您可以使用请求来获取它:

import requests

r = requests.post('https://siftery.com/product-json/microsoft-outlook')
data = r.json()['content']
companies = data['companies']
for company in companies:
    print(companies[company]['name'])

<强>输出

Public Technologies
Consalta
PagesJaunes.ca
Chumbak
Media Classified
P.I. Works
Saatchi & Saatchi Pro
Tribeck Strategies
Marketecture Solutions, LLC
Trinity Ventures
ARGOS
CFN Services
Last.Backend
Saatchi & Saatchi USA
Netcad
Central Element
NextGear Capital
Masao
Avalon
Motiwe
Bilge Adam
Impakt Athletics
SOZO Design
ThroughTek
Abovo42
Acxiom
ICEPAY
Connexta
Clearview
Mortgage Coach

您可能需要调查其他类别的信息:

>>> data.keys()
[u'product', u'vendor', u'users', u'group_members', u'companies', u'customers', u'other_categories', u'current_user', u'page_info', u'portfolio_products', u'primary_category', u'metadata']