课时8

爬取网页三步走

课时8_第1张图片
![ ![3.jpg](http://upload-images.jianshu.io/upload_images/2052237-e7ce15933a6b722e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/2052237-2d487d3fb8b8710a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • python打开本地文件
path = 'C:/Users/Google/Desktop/web/new_index.html'
with open(path, 'r') as f:
    Soup = BeautifulSoup(f.read(), 'lxml')
  • 依次选择审查元素 自己需要的selector
课时8_第2张图片
1.jpg

直接copy的 selector 和在浏览器看见的层级关系 比对下

body > div.main-content > ul > li:nth-child(1) > img
1.jpg

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): # 这个是多个 元素的  的时候 需要集体赋值。
  • 先说说字典构造
课时8_第3张图片
1.jpg
  • 那么 下一步就需要取具体某个元素里面的值。
'title': title.get_text(), #这个是取文本
'pic': pic.get('src'),#取 标签里面 src的 值
'cate': list(cate.stripped_strings)#多对一
  • 如果是多对一结构的时候 我们就应该在他的父级标签停下来。
课时8_第4张图片
1.jpg

这里面就要把 span 这个给删了 因为

1.jpg

我们要获取里面的多个标签。 下一步就要获取一个父级标签下面子标签下的所有文本信心, 就用 .stripped_strings 这个方法,由于是成组的标签 所以我们要把它列表化。

'cate': list(cate.stripped_strings)
  • 下面要找出所有分数大于3 的文章, 那么我应该把数据添加到列表里面然后再筛选。
    第一步建立空列表,
1.jpg

第二步 添加数据到列表

课时8_第5张图片
2.jpg

第三步 筛选

课时8_第6张图片
1.jpg

这里面有两点 第一用for函数分别取出, 第二 float 字符串为数字, 以及怎么取字典里面的键值。

你可能感兴趣的:(课时8)