最近打算好好学习爬虫,给自己定了几个小目标:
- 爬取基本信息,以豆瓣为例,爬取豆瓣上排名前250位的电影名称;
- 用scrapy制作爬虫,制作一个入门级爬虫;
- 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(" ") == -1:
# item.find(" ")值为-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(" ") == -1: # item.find(" ")值为-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()