我试图废弃此网站上的所有链接,当我这样做时,我得到了意想不到的结果。我发现这是因为javascript而发生的。
"查看所有类别"选项卡,您将找到所有主要产品类别。如果将鼠标悬停在任何类别上,它将扩展类别。我想要每个主要类别的链接。
url = 'http://www.snapdeal.com/'
data = urllib2.urlopen(url)
page = BeautifulSoup(data)
#print data
for link in page.findAll('a'):
l = link.get('href')
print l
但这给了我不同的结果,我的预期(我关闭了java脚本并查看了页面源代码,输出来自此源代码)
我只想查找每个主要类别的所有子链接。有什么建议会欣赏吗?
答案 0 :(得分:2)
发生这种情况只是因为你让BeautifulSoup选择了自己最好的解析器,而你可能没有安装lxml。
最好的选择是使用html.parser
来解析网址。
from bs4 import BeautifulSoup
import urllib2
url = 'http://www.snapdeal.com/'
data = urllib2.urlopen(url).read()
page = BeautifulSoup(data,'html.parser')
for link in page.findAll('a'):
l = link.get('href')
print l
这对我有用。请确保安装依赖项。
答案 1 :(得分:1)
Categories Menu是您要查找的网址。许多网站使用XHR(XMLHTTPRequest)动态生成内容。 为了检查网站的组件,请熟悉Firefox中的Firebug插件或Chrome中的开发人员工具(内置插件)。您可以在上述附加组件的网络选项卡下查看网站中使用的XHR。
答案 2 :(得分:0)
我认为你应该尝试另一个库,例如selenium ,它为你提供一个网络驱动程序,这就是这个库的优点,对于我自己,我无法用bs4处理javascripts。
答案 3 :(得分:0)
使用网络抓取工具,例如scrapy
或mechanize
在机械化中,要获取snapdeal主页中的所有链接,
br=Browser()
br.open("http://www.snapdeal.com")
for link in browser.links():
print link.name
print link.url
答案 4 :(得分:0)
我一直在寻找一种从网页中抓取链接的方法,这些网页只在实际浏览器中呈现,但希望使用无头浏览器运行结果。
我能够使用phantomJS,selenium和beautiful soup
来实现这一目标#!/usr/bin/python
import bs4
import requests
from selenium import webdriver
driver = webdriver.PhantomJS('phantomjs')
url = 'http://www.snapdeal.com/'
browser = driver.get(url)
content = driver.page_source
soup = bs4.BeautifulSoup(content)
links = [a.attrs.get('href') for a in soup.find_all('a')]
for paths in links:
print paths
driver.close()
答案 5 :(得分:0)
以下示例将同时适用于HTTP
和HTTPS
。我正在写此答案,以说明如何在Python 2
和Python 3
中都可以使用它。
Python 2
这受this answer的启发。
from bs4 import BeautifulSoup
import urllib2
url = 'https://stackoverflow.com'
data = urllib2.urlopen(url).read()
page = BeautifulSoup(data,'html.parser')
for link in page.findAll('a'):
l = link.get('href')
print l
Python 3
from bs4 import BeautifulSoup
from urllib.request import urlopen
import ssl
# to open up HTTPS URLs
gcontext = ssl.SSLContext()
# You can give any URL here. I have given the Stack Overflow homepage
url = 'https://stackoverflow.com'
data = urlopen(url, context=gcontext).read()
page = BeautifulSoup(data, 'html.parser')
for link in page.findAll('a'):
l = link.get('href')
print(l)
其他语言
有关其他语言,请参见this answer。