无法使用Python BeautifulSoup从零售商网站获取数据

时间:2019-05-15 14:53:29

标签: python web-scraping beautifulsoup

我正在尝试刮擦特定网站的价格。我一直在尝试抓取的是https://www.harveynorman.com.au/asus-f402wa-ga019t-14-inch-laptop.html

import json
import requests

session = requests.Session()
jar = requests.cookies.RequestsCookieJar()
jar.set('incap_ses_572_39856', 'wuEvYO64IwcG0nzjJijwB+oi3FwAAAAA0mUuBJjlb55z2q8aD0K/Ug==; SLIBeacon=5cdc22e9ece4f; SLIUserID=168578381; __utma=137779881.1422157795.1557930730.1557930730.1557930730.1; __utmc=137779881; __utmz=137779881.1557930730.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt=1; _gcl_au=1.1.866045692.1557930730; _ga=GA1.3.1422157795.1557930730; _gid=GA1.3.1396003810.1557930731; _caid=067e96e9-dfea-4ff0-bd40-7729d204dc3c; _cavisit=16abbe8672e|; gdprContinent=NOT-EU; SLIBeacon=5cdc22e9ece4f; _fbp=fb.2.1557930734066.1140960424; _hjIncludedInSample=1; inptime0_3986_au=0; com.silverpop.iMAWebCookie=5621042d-8a53-3d48-d144-beb9db181190; com.silverpop.iMA.session=83ab8550-a067-6e50-7239-411cde0ad75d; com.silverpop.iMA.page_visit=-303946284:; reloadLists=true; inpsession_3986_au=03BA299D-6307-61F5-DD5E-F3F561CCA385; __gads=ID=d4a1dce2efb966ac:T=1557930751:S=ALNI_MaarXiiUHzcInDtMvu3BU8YWN9ziw; LPVID=FhMTIwOTc4YzY5N2VjNDhl; LPSID-58902652=tfROAwmpTgu9u-avZulSqg; inptime_3986_au=120; __utmb=137779881.2.10.1557930730; _gat_UA-5631569-15=1; _gat_UA-5631569-18=1')

session.cookies = jar
r = session.get('https://www.harveynorman.com.au/applybuy/apply/product?id=283011&price=297&_=1557930879834')

print(r.text)

我的预期结果是找到要使用的json数据或整个html。不幸的是,即使使用cookie,我也无法获得某种数据。结果是:

<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>

需要帮助如何解决此类问题,而无需使用硒或草皮。谢谢!

1 个答案:

答案 0 :(得分:1)

此站点由反机器人(CDN)保护。 Incapsula是市场上主要的反机器人网络之一。它使用基于ML的高级算法,基于包括浏览器指纹在内的众多参数来检测它是机器人还是人类。

我们可以通过几种方法尝试这种网站,

  1. 使用模拟浏览器的正确标题
  2. 使用高级代理(例如住宅代理),例如Microleaves,Crawlera
  3. 每个请求和代理轮换的适当时间间隔

甚至开发了一些预定义的库来绕过防火墙,例如incapsula-cracker-py3。

无论您尝试什么,代码都应该模仿真实的人。