课时8

爬取网页三步走

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

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

1.jpg

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

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

第二步 添加数据到列表

2.jpg

第三步 筛选

1.jpg

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容