|
发表于 2020-3-25 17:48:46
|
显示全部楼层
我刚学的,或许对你有用- import urllib.request
- from bs4 import BeautifulSoup
- def url_open(url):
- req = urllib.request.Request(url)
- req.add_header("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36")
- response = urllib.request.urlopen(req)
- html = response.read().decode("gbk")
- return html
- def get_url(url):
- html = url_open(url)
- soup = BeautifulSoup(html,"lxml")
- '''print(soup.prettify()) # 格式化代码,自动补全代码
- print(soup.title.string)'#只有标签名,不会有title
- print(soup.title) #有标签名的title
- print(type(soup.title))
- 是head标签,如果没有,整个后边的
- print(soup.link)#返回link标签里的选项,但是都是第一个
- #获取标签的名称
- print(soup.title.name) #获取的外层的标签的名称也就是title
- #获取属性 下面两个的内容一样
- print(soup.link.attrs["href"])
- print(soup.link["href"])
- # 获取内容
- print(soup.title.string)
- #嵌套模式
- print(soup.script.src)
- #子节点
- print(soup.header.contents) #返回的是个列表
- print(soup.header.img["src"]) #前边几层都可以.最后一层要用[]的字典形式
- print(soup.ul.li.contents)
- print(soup.ul.li.children)
- for i,child in enumerate(soup.ul.li.children):#返回的是迭代器,用enumerate来得出
- print(i,child)
- #子孙节点
- for i,child in enumerate(soup.ul.li.descendants):#返回的是迭代器,用enumerate来得出
- print(i,child)
- #父节点
- print(soup.ul)
- print("\n"+"i love fishc.com" +"\n")
- for i,child in enumerate(soup.ul.li.parent):
- print(i,child)
- #祖先节点
- print(soup.style)
- print("\n"+"i love fishc.com" +"\n")
- for i,child in enumerate(soup.style.parents):
- print(i,child)
- #兄弟节点
- print(soup.script)
- print("\n"+"i love fishc.com" +"\n")
- print(len(list(enumerate(soup.script.next_siblings))))
- print(list(enumerate(soup.script.previous_siblings)))
- #find_all与urllib类似,可以查找标签名,属性,内容 返回的是列表,class bs4
- print(soup.find_all("ul"))
- print("-------------------------------------------------------------------------------------------------")
- print(soup.find_all("ul")[0])
- for ul in soup.find_all('ul'):
- print(ul.find_all("li"))
- print("-------------------------------------------------------------------------------------------------")
- #attrs是查询字典属性的属性,传入的参数是字典
- print(soup.find_all(attrs = { 'rel':"stylesheet"}))
- print("-------------------------------------------------------------------------------------------------")
- print(soup.find_all(attrs = {'id':"nav_sel"}))
- #也可以直接插class,id等,由于class在python属于关键词,后边要交_,输入的是class_
- print(soup.find_all(rel="stylesheet"))
- print("-------------------------------------------------------------------------------------------------")
- print(soup.find_all(id = "nav_sel"))
- # 根据text进行选择,返回的就是字,并不是条目
- print(soup.find_all(text = "福利"))
- # find方法和fin_dall类似,find返回第一个元素
- print(soup.find("ul"))
- print(type(soup.find('ul')))
- print("-------------------------------------------------------------------------------------------------")
- print(soup.find("page"))
- #其他函数 find_parent()父,子,兄弟,后面的,前面的
- #CSS选择器,使用select()直接传入css选择器
- #选择class时要加一个点,如果存在嵌套关系,两个class之间不需要加任何符号,用一个引号括起来即可,加一个空格;可以选标签; 用id选择,id用#代替 id ="list2"class = element可以用“#list2 .element”,返回的是列表
- print(soup.select('.hot'))
- print("-------------------------------------------------------------------------------------------------")
- print(soup.select(".container .body"))
- print(soup.select("#list2 .element")
- print(soup.select("ul li"))'''
- #select获取属性,[属性名] 或者ul[].attrs["id"],由于返回的是列表,所以要变成字符串输出
- print(soup.link.attrs["href"])
- print(soup.select('link')[0].attrs["href"])
- #get_text获取标签里边的文本,也是列表要加序列号
- for each in soup.select("a"):
- print(each.get_text())
- if __name__ == "__main__":
- url = "http://www.quannovel.com/read/11/2588.html"
- get_url(url)
复制代码 |
|