python爬虫入门(2)


python爬虫入门(2)


在上一则博文中我只爬取了一页,显然差强人意,本次爬取所有的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!!!

你可能感兴趣的:(小项目,python,xpath,excel)