Python中文社区我的Python自学之路

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

2017-03-16  本文已影响140人  大邓和他的python

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

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

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、即使使用了上面两种策略,人家仍然封锁你了,那么要用到代理服务器抓数据,让网站不知道你是谁,也就没法封锁你了。

第一种今天已经在案例中示范了,后续我会就着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('good work!')  #打印出来,程序完美结束

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


【python爬虫系列之】爬豆瓣电影小案例 - 腾讯视频 欢迎加入
上一篇 下一篇

猜你喜欢

热点阅读