2

我试图从网站上抓取数据,但是 find() 方法找不到标签。下面是我的代码:

import urllib2 
from bs4 import BeautifulSoup

url='http://www.jbhifi.com.au/computers/laptop-notebook/'
req=urllib2.Request(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 5.1)          AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36'})
webpage=urllib2.urlopen(req)
content=webpage.read()
soup=BeautifulSoup(content)
x=soup.find("div",attrs={'id':'content-two'})
print x  #return None

然后,我发现了漂亮的 HTML 解析器头

head=soup.find('head')
print head # print out content within <head>tag
body=soup.find('body')
print body # Print None

我真的很困惑。我以前用过beautifulsoup 几次。这是我第一次遇到这个问题。任何人都知道如何解决这个问题?谢谢你。

问题已解决。我卸载了 beautifulsoup 4.2,然后安装了 beautifulsoup 4.3。该代码现在有效。

4

2 回答 2

2

代码运行良好。您认为 'x' 将返回 None 的假设是错误的。

(Pdb) print x is None
False
(Pdb) print str(x)[:100]
<div id="content-two" style="float:right;width:828px;">
<div style="padding-bottom:7px;"><a href="ht
于 2013-09-22T10:05:40.233 回答
1

你可以检查一下。

确保您要解析的代码在页面上

view-source:chrome-extension://http://www.jbhifi.com.au/computers/laptop-notebook/

如果不存在,则 html 代码由 javascript 创建。

这个案例。使用 selenium 或找到使用 javascript 生成 html 代码的部分。


有两种方法可以在 JavaScript 中生成 HTML 代码。

第一种方式,使用 javascript 生成 html 代码 => 推荐selenium + bs4 + requests

第二种方式,在服务器上接收数据后用javascript生成html代码=>推荐bs4 +请求

于 2017-10-06T04:24:47.637 回答