学习爬虫的第一次实践,在这里记录下 以 https://movie.douban.com/chart 网页数据为例
爬取内容:
初次尝试,所以这里的代码比较繁琐、不够简洁,旨在理清各个环节
import requests from bs4 import BeautifulSoup # 爬取地址 url = "https://movie.douban.com/chart" # 访问头,模拟浏览器 header={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'} # 得到原始网页数据 res = requests.get(url,headers=header) # 将Response得到的数据转换为text文本 (转换为'str'类型) res_text = res.text # 用html.parser 解析器来解析文本 datas = BeautifulSoup(res_text,'html.parser') # 查找第一个最小父级标签 # movie的类型为<class 'bs4.element.Tag'> Tag类继承自PageElement ,而PageElement继承自Object movie = datas.find('div', class_='pl2') # 找到父级标签中的<a>标签信息 movie_a = movie.find('a') """ print(movie_a) 可以看到: <a class="" href="https://movie.douban.com/subject/30299515/"> 釜山行2:半岛 / <span style="font-size:13px;">釜山行2 / 半岛</span> </a> ————————————可以看到以上数据仍然不够纯粹,还要进一步提纯 """ # text获取标签中的内容,再使用replace方法去掉多余的空格及换行符 (Tag类中的text=property(get_text) 使用property方法来清洗标签) # print(name) 得到结果 釜山行2:半岛/釜山行2/半岛 movie_name = movie_a.text.replace(' ', '').replace('\n', '') # 获取<a>中电影的url地址信息 movie_url = movie_a['href'] # 根据网页信息获取基本信息(上映时间,演员表,时长等等),并清洗数据 movie_info = movie.find('p', class_='pl').text # 根据网页信息获取电影星级、评价数,并清洗数据 tag1_evaluate = movie.find('div', class_= 'star clearfix') movie_evaluate = tag1_evaluate.text.replace(' ', '').replace('\n', '') # 打印影片信息 print(movie_name) print(movie_url) print(movie_info) print(movie_evaluate)
在第一步的基础上进行了优化,把网页中的目标数据全爬下来并保存到本地
(这里就直接上代码了)
成功爬下想要的数据
整个爬取过程:
获取数据 1.通过url发起请求 解析数据 2.服务器返回的数据放入一个Response对象中 3.将数据转换为字符串 筛选数据 4.通过BeautifulSoup把字符串解析为BeautifulSoup对象 5.有两种情况: (1)使用find()方法得到Tag对象 (2)使用find_all()方法得到ResultSet对象,实际上就是list/dictpython还是非常有趣并且有用的,就拿爬虫来说,如果用得好,那么在平时的生活工作中就是一大助力;当然它也是一柄双利剑,爬取数据要遵守相应的规则,知道哪些是不能爬的,不然也可能给自己带来麻烦。 其次就是通过这次的记录,让原本对于BeautifulSoup模糊的认识更加清晰。学习知识要知其然,也应该知其所以然,这条路还有很长要走。