以下代码用于从 http://buy.ccb.com/ 网站爬取手机栏目的地址,在 while 模块中逐个提取链接并判断该链接的说明文字是否为“手机”,是的话就返回该链接,否则继续提取其余链接, 如果链接都遍历完毕还没找到,则在 try 模块中捕捉该异常并返回 None。
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
baseUrl="http://buy.ccb.com/"
def getMobileLinks(articleUrl):
html = urlopen(baseUrl+articleUrl)
bsObj = BeautifulSoup(html,'lxml')
isFound = 0
url = bsObj.find("div", {"class":"lists"}).find("a", href=True)
while isFound == 0 :
print("a=",url)
h=re.search(r'手机', ''.join(url))
if h != None :
isFound = 1
return url.attr("href")
else:
try:
url = bsObj.find("div", {"class":"lists"}).find_next("a", href=True) #语句 1
except Exception as e: #语句 2
print("Not Found!",e)
return None
links = getMobileLinks("")
print('links=',links)
上面代码反复输出如下一行内容:
a= http://buy.ccb.com/searchproducts/pv_0_0_0_0.jhtml?hotKeySize=6&hotMerchantList=%24hotMerchantList.size%28%29&catId=&selectCatId=&qa=&query=APPLE " style="margin: 0px 3px 0px 0px;" target="_blank">苹果
我的问题如下:
1、语句 1 用于获取 BeautifulSoup 找到的下一个"a"标签对象,虽然执行没有报错但是出现了死循环,看来是 find_next 找下一个"a"标签对象的语法不对,请问正确的语法应该如何写呢?
2、语句 2 的本意是在 BeautifulSoup 返回的"a"标签对象都遍历完毕时报错,但是不知道没有"a"标签对象可找时会抛出什么异常?
恳请大家指点,感谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.