Python爬取豆瓣电影top250

其实这个代码挺简单的,跟上一个药智网爬取没太大区别。

1、想说一下豆瓣的URL的问题,开始的时候总是链接失败,想说代码没问题,最有可能的就是网址的问题了 

发现我的网址是直接从任务那复制粘贴的,而真正豆瓣的网址与所给的是有区别的:

#我一开始写的网址
http://movie.douban.com/top250?
#正确的网址
http://movie.douban.com/top250?start=0&filter=
所以网址很重要,一定要事先弄清楚。

2、再有是逐页爬取的时候,网址的具体变化是’start=‘那


便在开头定义了一个变量 page=0和cur_url=http://movie.douban.com/top250?start={page}&filter=

另url=cur_url.format(page=pageIndex*25)

并for i in (1,10),将i的数值传入pageIndex,在下面代码中可以体现。

3、find_all()函数可以有多种用法,在这我用的是按CSS类名搜索tag的功能,其中因为class在python中是保留字,所以用class_类名搜索tag(BeautifulSoup4.1.1版本后可以使用)

下面是写的代码:

#coding=utf8
import urllib2
from bs4 import BeautifulSoup
class DB():
     def __init__(self):
         #定义page函数
         self.page=0
         self.cur_url="http://movie.douban.com/top250?start={page}&filter="
         self.user_agent = 'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)'
         self.headers = {'User_Agent' :self.user_agent}
     def getHtml(self,pageIndex):
         try:
             #page的变化规律
             url=self.cur_url.format(page=pageIndex*25)
             request=urllib2.Request(url,headers=self.headers)
             response=urllib2.urlopen(request)
             html=response.read()
             return html
         except  urllib2.URLError,e:
             if hasattr(e,'reason'):
                 print u'loading error',e.reason
                 return None
     def getPage(self):
         for i in range(0,10):
             html=self.getHtml(i)
             soup=BeautifulSoup(html)
             #用CSS类名搜索tag
             SJ=soup.find_all('div',class_='item')
             print SJ
             with open('douban.txt','a+') as f:
                 for item in SJ:
                     f.write(item.get_text('|',strip=True).encode('utf-8')+'\n')
spider=DB()
spider.getPage()

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值