我正试图在Flipkart上抓这个页面:
我试图找到与班级相关的div" fk-ui-ccarousel-supercontainer same-vreco-section reco-carousel-border-top sameHorizontalReco"但它返回空结果。
from bs4 import BeautifulSoup
import requests
url = "http://www.flipkart.com/moto-x-play/p/itmeajtqp9sfxgsk?pid=MOBEAJTQRH4CCRYM&ref=L%3A7224647610489585789&srno=p_1&query=moto%20x%20play&otracker=from-search"
page = requests.get(url)
soup = BeautifulSoup(page.text)
divs = soup.find_all("div",{"class":"fk-ui-ccarousel-supercontainer same-vreco-section reco-carousel-border-top sameHorizontalReco"})
print divs
div是空的。我使用inspect元素复制了类名。
答案 0 :(得分:2)
使用requests.get(url)
时,您需要加载url
的HTML内容,而不启用 JavaScript。如果没有启用JavaScript,那么查看此产品的“”客户的页面部分也会被视为“”,甚至都不会呈现。
您可以通过在浏览器中关闭JavaScript来探索此行为。如果你经常刮,你可能还想下载一个JavaScript切换器插件。
您可能需要考虑的另一种方法是使用浏览器自动化工具,例如selenium
。
答案 1 :(得分:0)
requests.get(..)
将返回该网址上的纯HTTP GET内容。不会下载所有页面包含的Javascript rels,也不会执行任何内联javascript。
如果在浏览器中加载DOM后,flipkart使用js修改DOM,则这些更改不会反映在page.contents
或page.text
值中。
你可以在漂亮的汤中尝试不同的parser而不是默认的解析器。我试过了html5lib
,它适用于不同的网站。也许它也适合你。它将比默认解析器慢,但可能比selenium或其他完全成熟的无头浏览器更快。