目标:爬取本地网页中,评分大于3的文章,并打印出来
准备:
- 安装Python3.0。
- 安装PyCharm,用于开发Python的集成环境。
- 安装BeautifulSoup库,学习爬虫需要的库。
BeautifulSoup:是一个可以从HTML和XML中读取数据的库。库也叫模块,在笨办法学Python中叫做特征,是其他程序员开发好的一些代码,可以拿来导入(import),然后调用。开发之前最好先学习一下Python的基本知识,《笨办法学python》或者是《编程小白的第一本python》都是不错的选择。
思路:
- 使用BeautifulSoup解析本地网页
- 获取所需的信息标签
- 精简获取的信息
代码:
1 from bs4 import BeautifulSoup 2 # BeautifulSoup从HTML和XML中读取数据的库 3 4 info = [] 5 # 定义一个名为info的列表 6 7 with open(‘/Users/my/Desktop/lesson9/new_index.html‘,‘r‘) as wb_data: 8 Soup = BeautifulSoup(wb_data,‘lxml‘) 9 # 在开发的过程中,许多对象在使用后,都会执行一条或者多条语句来关闭,释放等操作,这样累赘的操作就会让人忘记,with语句就可以解决这些问题。 10 # 将文件以wb_data的名字打开 11 # 打开之后再用beautifulSoup解析网页 12 13 # 粗略的获取需要信息的标签 14 # 依次是图像、标题、描述、标签、评分 15 images = Soup.select(‘body > div.main-content > ul > li > img‘) 16 titles = Soup.select(‘body > div.main-content > ul > li > div.article-info > h3 > a‘) 17 descs = Soup.select(‘body > div.main-content > ul > li > div.article-info > p.description‘) 18 rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span‘) 19 cates = Soup.select(‘body > div.main-content > ul > li > div.article-info > p.meta-info‘) 20 # print(images,titles,descs,rates,cates,sep=‘\n---------------------------------\n‘) 21 22 # 精简获取的信息,留下自己有用的东西 23 # for循环可以遍历任何序列的项目 24 for title,image,desc,rate,cate in zip(titles,images,descs,rates,cates): 25 data = { 26 ‘title‘: title.get_text(), # get_text()去除html标签,获得文本信息。 27 ‘rate‘: rate.get_text(), 28 ‘desc‘: desc.get_text(), 29 ‘cate‘: list(cate.stripped_strings), # stripped_strings获得一个父级标签下所有子标签的文本信息 30 ‘image‘: image.get(‘src‘), # get()获得某个标签的属性 31 } 32 info.append(data) #append在列表末尾添加新的对象 33 34 # 打印评分大于3的文章 35 for i in info: 36 if float(i[‘rate‘]) >3: 37 print(i[‘title‘],i[‘cate‘],i[‘rate‘])
遇到问题:
1. 安装BeautifulSoup库时,PyCharm提示Error错误
原因:教程中使用的是Python2,而自己机子使用的是Python3,要想安装BeautifulSoup,需要搜索bs4。具体步骤:打开PyChram,在File中找到Setting,搜索project Interpreter。然后在右侧点击“+”,搜索bs4,安装就可以看到BeautifuSoup库。
2. 输入的错误,在输入的时候多了一个空格或者少了一个空格而报错。
如在:
rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span‘)
之前加了一个空格就会报错。变成了(rate前面有一个空格)
rates = Soup.select(‘body > div.main-content > ul > li > div.rate > span‘)
需要仔细检查,严格按照格式书写。
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
#s3gt_translate_tooltip_mini { display: none !important }
原文地址:https://www.cnblogs.com/wall9527/p/9866122.html
时间: 2024-11-05 16:10:38