爬取网页三步走
- python打开本地文件
path = 'C:/Users/Google/Desktop/web/new_index.html'
with open(path, 'r') as f:
Soup = BeautifulSoup(f.read(), 'lxml')
- 依次选择审查元素 自己需要的selector
直接copy的 selector 和在浏览器看见的层级关系 比对下
body > div.main-content > ul > li:nth-child(1) > img
li:nth-child(1) 改成 nth-of-type(1)
- 那么我会按照层级关系 替换成图片的那样, 再者把
body > div.main-content > ul.articles > li > img
images = Soup.select('body > div.main-content > ul.articles > li > img')
- print 函数里面 如果有多个不同类别的结果,想分割的话 如下
print(images,titles,sep'\n---------\n')
- 那么当找到的结果是多个的时候 返回的就是一个列表,如果要单独操作就需要for 循环,
for title in titles: #这个是一个元素的时候
for title, pic, desc, rate, cate in zip(titles, pics, descs, rates, cates): # 这个是多个 元素的 的时候 需要集体赋值。
- 先说说字典构造
- 那么 下一步就需要取具体某个元素里面的值。
'title': title.get_text(), #这个是取文本
'pic': pic.get('src'),#取 标签里面 src的 值
'cate': list(cate.stripped_strings)#多对一
- 如果是多对一结构的时候 我们就应该在他的父级标签停下来。
这里面就要把 span 这个给删了 因为
我们要获取里面的多个标签。 下一步就要获取一个父级标签下面子标签下的所有文本信心, 就用 .stripped_strings 这个方法,由于是成组的标签 所以我们要把它列表化。
'cate': list(cate.stripped_strings)
- 下面要找出所有分数大于3 的文章, 那么我应该把数据添加到列表里面然后再筛选。
第一步建立空列表,
第二步 添加数据到列表
第三步 筛选
这里面有两点 第一用for函数分别取出, 第二 float 字符串为数字, 以及怎么取字典里面的键值。