爬豆瓣电影名的小案例2(附视频操作)

浏览: 1392

上一篇只是对一个网页进行的数=数据提取,还不算完整的的爬虫。

我的理解是,一个初级的爬虫脚本应该包括三部分:

  1. 网址处理器,用来提供抓取网址对象
  2. 网页解析器,用来提取网页中稀疏分散着的目标数据
  3. 数据存储器,用来保存提取的数据。

上一节的小例子,只涉及到第二部分,第一部分不完整,第三部分没涉及。

网址处理器

做爬虫前,先分析要抓网页的网址规律,通过规律构建每一个待抓页面的网址

网址解析器

做爬虫,先分析一个网址上的数据提取规则,推而广之将规律应用到待爬网站的所有的网址上。注意可能有点网页数据是空的,应该考虑try。。。except。。。处理异常情况出现。

数据存储器

入门的爬虫,要爬的数据量一般不是很大,可以用txt,csv等进行保存,保存时注意读写方式(‘a’ , w',‘a+’),推荐使用'a+'。,编码方式使用utf-8即

 f = open(path,'a+',encoding='utf-8')来建保存数据的文件。

爬虫注意事项:

  1. 爬虫的访问速度不要太快,尽量使用time.sleep(1),降低访问网站的频率,做有道德合法公民。如果你太狠了,造成人家服务器瘫痪,属于犯法行为。
  2. 咱们的访问的网页数目比较少,如果特别多,访问到一定程度之后,人家网站可能就封锁你,因为你用的是python访问的。后续我会讲如何使用header伪装成浏览器
  3. 即使使用了上面两种策略,人家仍然封锁你了,那么要用到代理服务器抓数据,让网站不知道你是谁,也就没法封锁你了。
  4. 第一种今天已经在案例中示范了,后续我会就着header伪装和代理访问继续写。

好了,今天我们继续抓豆瓣电影网,我们这次抓烂片中的电影名,参演演员,评分,评论人数。上代码:

import requests
from bs4 import BeautifulSoup
import time
for page in range(90):
#要学会用{}和format组合传递参数
url = 'https://movie.douban.com/tag/烂片?start={}'.format(page*20)
response = requests.get(url).text
bsObj = BeautifulSoup(response, 'html.parser')

#匹配所有符合标签为div,属性为pl2的标签,返回的是列表类型
div_tags = bsObj.find_all('div', {'class': 'pl2'})
for div_tag in div_tags:
try:
mov_name = div_tag.find('a').get_text().strip('\n').replace(' ','')
actors = div_tag.find('p').get_text()
rate = div_tag.find('div').findAll('span')[1].get_text()
peoplesNum = div_tag.find('div').findAll('span')[2].get_text()[1:-4]
with open(r'/Users/apple888/Desktop/movies.txt', 'a+', encoding='utf-8') as f:
content = mov_name + ';' + actors + ';' + rate + ';' + peoplesNum + '\n'
f.write(content)
except:
continue
time.sleep(1)
#print(div_tag)
print('good work!') #打印出来,程序完美结束

附上视频,这个视频40分钟,1.4G,上传用了3个钟头。。。。。。

链接文字

推荐 0
本文由 邓旭东HIT 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册