爬虫学习之旅

最近打算好好学习爬虫,给自己定了几个小目标:

  1. 爬取基本信息,以豆瓣为例,爬取豆瓣上排名前250位的电影名称;
  2. 用scrapy制作爬虫,制作一个入门级爬虫;
  3. scrapy在爬取基本信息的同时,能爬取图片。
    首先,开始今天的任务——爬取豆瓣网排名前500位的电影。

爬取排名前250位的电影名称

第一步,观察url

再点击第2页,截图如下:
这里写图片描述
仅仅在start的取值上有变化,可以发现其取值规律start=(i-1)*25。
接下来先让i=0先打印出第一页的内容,代码如下:

from urllib.request import urlopen
from urllib import error
import re
i=0
top_num=1
data=[]
cur_url = "https://movie.douban.com/top250?start={page}&filter="
my_url = cur_url.format(page=i * 25)
my_page = urlopen(my_url).read().decode("utf-8")
titles = re.findall(r'<span class="title">(.*?)</span>', my_page)
for item in titles:
    if item.find("&nbsp") == -1:  
    # item.find("&nbsp")值为-1和0,-1为不出现
        tem_data = []
        tem_data.append("Top" + str(self._top_num) + ":" + item)
        top_num += 1
        data.extend(tem_data)
for item in data:
    print(item)

接下来用一个for循环将第1页到第10页上的title全部提取出并打印出来,部分结果如下:
这里写图片描述

完整代码如下:

from urllib.request import urlopen
from urllib import error
import re
from bs4 import BeautifulSoup
class douban():
    def __init__(self):
        self._top_num = 1
        self.data = []
        self.cur_url = "https://movie.douban.com/top250?start={page}&filter="
        self.i = 0

    def get_title(self,i):
        my_url = self.cur_url.format(page=i * 25)
        try:
            my_page = urlopen(my_url).read().decode("utf-8")
            # bsObj = BeautifulSoup(my_page)
            titles = re.findall(r'<span class="title">(.*?)</span>', my_page)
            for index, item in enumerate(titles):
                if item.find("&nbsp") == -1:  # item.find("&nbsp")值为-1和0 -1为不出现
                    tem_data = []
                    tem_data.append("Top" + str(self._top_num) + ":" + item)
                    self._top_num += 1
                    self.data.extend(tem_data)
        except error.URLError as e:
            print(e)

    def getTop(self):
        for m in range(10):
            self.i=m
            self.get_title(self.i)
def main():
    db=douban()
    db.getTop()
    for item in db.data:
        print(item)
if __name__=='__main__':
    main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值