主要利用urllib2,它比urllib可以设置超时参数
import urllib2 # 获取网页源码 def get_html(url): # 设置失败次数 failureCount = 1 while True: try: # 允许重试次数 if failureCount >= 10: break req = urllib2.Request(url) # 10为超时时间 response = urllib2.urlopen(req, None, 10) page = response.read() except: failureCount += 1 print '网络连接出现问题, 正在尝试第'+failureCount+'次请求: ' else: break return page3.1 Tag(直接访问标签)
3.3.1 直接访问遇到的第一个该标签
soup.title soup.head soup.a soup.p # 获取该标签下的所有属性,返回一个字典 soup.p.attrs # 获取该节点下的某个属性 soup.p['class'] soup.p.get('class')3.3.2 修改某个节点
soup.p['class']="a"3.3.3 删除某个节点
del soup.p['src']3.2 NavigableString获取标签内部文字 .string,如果节点中间有注释符号,则符号不会输出,但注释内容会输出
soup.a.string3.3 BeautifulSoup表示网页所有源码,可以当成Tag使用
3.4 Comment当标签内部文字是注释的时候,会返回bs4.element.Comment类型
4.1 获取一个节点下的所有直接子节点
contents将某个节点下的所有子节点以列表的形式返回
soup.head.contents.children是获取一个节点下的所有子节点列表生成器
4.2 获取所有字符串内容 .strings
4.3 父节点 p.parent
5.1 搜索所有<div>节点soup.find_all()
soup.find_all('div')5.2 增加搜索条件
# 查找所有类名为news-b的<div>节点 labelList = soup.find_all('div', class_='news-b') # 可以结合正则表达式 soup.find_all('div', href=re.compile(r'/hehe/\d+\.html'))5.3 查找某个节点soup.find()
labelList = soup.find('div', class_='news-b')5.4 多次连续查找
picture = soup.find('div', class_='news-banner clearfix').find_all('img')5.5 同时查找多个节点
# 同时查找标签a和b的内容 soup.find_all(["a", "b"])5.6 访问节点中的文字信息get_text()
labelList = soup.find('div', class_='news-b').get_text()