在上一则博文中我只爬取了一页,显然差强人意,本次爬取所有的top250并储存为txt和excel
先看一下怎么爬取所有的电影:
#看看每一页的标签的异同:(列举前三页)
#https://movie.douban.com/top250?start=0&filter=
#https://movie.douban.com/top250?start=25&filter=
#https://movie.douban.com/top250?start=50&filter=
#所以可以遍历
只有start=不一样,所以可以把那个数字设为参数,每次递增25,然后25为一组进行遍历
先上txt的代码因为比较直白:(每个位置都有注释)
下面展示一些 内联代码片
。
import requests
from lxml import etree
import time
class Movie(object):
def __init__(self):
self.headers = {
'user-agent':'mozilla/5.0'}
self.url = 'https://movie.douban.com/top250?start={}&filter=' #url has changed compared with the former one,cuz' I'm preparing for the items be read in lines,{
} is aimed for the format()
def get_html(self,url):
resp = requests.get(url,headers = self.headers)
html = resp.text
self.parse_html(html)
def parse_html(self,html):
xp_hpml = etree.HTML(html)
titles = xp_hpml.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')
scores = xp_hpml.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')
comments = xp_hpml.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')
for x,y,z in zip(titles,scores,comments):
print(x ,y, z)
with open('movie','a+',encoding='utf-8') as f:
f.writelines([x,'--',y,'--',z])
f.write('\n') #为了好看需要手动添加空行与空格
n1.append(x)
n2.append(y)
n3.append(z)
def main(self):
start = time.time()
for i in range(0,250,25):
url = self.url.format(i)
self.get_html(url)
end = time.time()
print('time :',end-start)
spider = Movie()
spider.main()
上述代码中的url中:start={},在for循环中进行格式化输出,把所有的给了get_html,然后访问,解析,储存。
对于储存入excel中,我参考了一篇博文第一次用爬虫的数据存储到excel
然后进行了改动:在for循环中加入三个列表,再在储存至excel时遍历:
n1 = []
n2 = []
n3 = []
import xlwt
book=xlwt.Workbook() #创建一个excel
sheet1=book.add_sheet('first');i=0;i1=0;i2=0 #创建一个名字为first的sheet1
for j in n1: #遍历列表
sheet1.write(i,1,j) #在sheet1中第i行第一列写入j值
i+=1#增强字符叠加
for q in n2: #遍历列表
sheet1.write(i1,2,q) #在sheet1中第i1行第二列写入q值
i1+=1#增强字符叠加
for k in n3: #遍历列表
sheet1.write(i2,3,k) #在sheet1中第i2行第三列写入k值
i2+=1 #增强字符叠加
book.save('Movie.xlsx') #创建保存文件夹
继续打卡 day 2!!!