爬豆瓣电影名的小案例2(附视频操作)
请输入标题 bcdef
上一篇只是对一个网页进行的数=数据提取,还不算完整的的爬虫。
请输入标题 abcdefg
我理解的一个初级的爬虫脚本应该包括三部分:
1、网址处理器,用来提供抓取网址对象
2、网页解析器,用来提取网页中稀疏分散着的目标数据
3、数据存储器,用来保存提取的数据。
上一节的小例子,只涉及到第二部分,第一部分不完整,第三部分没涉及。
请输入标题 bcdef
网址处理器
做爬虫前,先分析要抓网页的网址规律,通过规律构建每一个待抓页面的网址
网址解析器
做爬虫,先分析一个网址上的数据提取规则,推而广之将规律应用到待爬网站的所有的网址上。注意可能有点网页数据是空的,应该考虑try。。。except。。。处理异常情况出现。
数据存储器
入门的爬虫,要爬的数据量一般不是很大,可以用txt,csv等进行保存,保存时注意读写方式(‘a’ , w',‘a+’),推荐使用'a+'。,编码方式使用utf-8即
f = open(path,'a+',encoding='utf-8')来建保存数据的文件。
请输入标题 abcdefg
爬虫注意事项:
1、爬虫的访问速度不要太快,尽量使用time.sleep(1),降低访问网站的频率,做有道德合法公民。如果你太狠了,造成人家服务器瘫痪,属于犯法行为。
2、咱们的访问的网页数目比较少,如果特别多,访问到一定程度之后,人家网站可能就封锁你,因为你用的是python访问的。后续我会讲如何使用header伪装成浏览器
3、即使使用了上面两种策略,人家仍然封锁你了,那么要用到代理服务器抓数据,让网站不知道你是谁,也就没法封锁你了。
第一种今天已经在案例中示范了,后续我会就着header伪装和代理访问继续写。
请输入标题 bcdef
好了,今天我们继续抓豆瓣电影网,我们这次抓烂片中的电影名,参演演员,评分,评论人数。上代码:
请输入标题 abcdefg
请输入标题 bcdef
import requests
from bs4 import BeautifulSoup
import time
for page in range(90):
url = 'https://movie.douban.com/tag/烂片?start={}'.format(page*20) #urllib.parser response = requests.get(url).text
bsObj = BeautifulSoup(response, 'html.parser')
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!')
请输入标题 abcdefg
附上视频,这个视频40分钟,1.4G,上传用了3个钟头。。。。。。https://v.qq.com/txp/iframe/player.html?vid=f0384cle4pi&width=500&height=375&auto=0