豆瓣电影top250

豆瓣电影排行榜250(初学爬虫)
新手的爬虫练手项目 和 朋友一起学的 记录一下
我写的

'''题目:全250电影,爬取电影名,上映时间,国家,什么类型电影,电影评分,写入txt文件'''
#编码格式UTF-8
'''
1.导入相应的库  我们使用了requests库写爬虫,使用xpath解析格式,需导入lxml.etree这库把网址进行转换,导入了正则库进行预备处理防止出现xpath无法获取相应数据的情况
2.发现对应源码在HTML中,不需要寻找其他解析方式(如js)可直接进行xpath
3.获取网址,从抓包处拿去请求头(cookies可有可无)
4.xpath解析拿剩下所有页面网址
5.在循环中逐一遍历其余网址对其发起请求
'''
import requests
from lxml import etree
import re
s=1
url='https://movie.douban.com/top250'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'}
response=requests.get(url=url,headers=headers).text
response=etree.HTML(response)
name_list=[]
release_list=[]
score_list=[]
time_list=[]
type_list=[]
url_list=[]
url1=response.xpath('//*[@id="content"]/div/div[1]/div[2]/a/@href')
for i in url1:
    i=url+i
    url_list.append(i)
for next in range(len(url_list)+1):
    name=response.xpath('//*[@id="content"]//a/span[1]/text()')
    release=response.xpath('//*[@id="content"]//li//p/text()[2]')
    score=response.xpath('//*[@id="content"]//li/div/div[2]/div[2]//span[2]/text()')
    for i in name:
        name_list.append(i)
        # print('name',i)
    for i in release:
        i=str(i)
        i=i.replace(' ','')
        i=i.replace('\xa0','')
        i=re.findall(r'.[^\n\s*\r]*',i)
        if len(i)==0:
            continue
        i=str(i[0]).split('/')
        time_list.append(i[0])
        release_list.append(i[1])
        type_list.append(i[2])
        # print('release1',i)
    for i in score:
        score_list.append(i)
        # print('score',i)
    # print('score:',len(score_list),'\ntime:',len(time_list),'\nrelease:',len(release_list),'\ntype:',len(type_list),'\nname',len(name_list))
    for i in range(len(name_list)):
        with open('豆瓣电影.txt','a') as f:
            f.write(f'电影名:{name_list[i]},上映时间:{time_list[i]},国籍:{release_list[i]},电影类型:{type_list[i]},评分:{score_list[i]}\n')
            print((f'第{s}部电影  电影名:{name_list[i]},上映时间:{time_list[i]},国籍:{release_list[i]},电影类型:{type_list[i]},评分:{score_list[i]}'))
            s+=1
    name_list.clear()
    release_list.clear()
    score_list.clear()
    type_list.clear()
    time_list.clear()
    try:
        response = requests.get(url=url_list[next], headers=headers).text
        response = etree.HTML(response)
    except:
        print('爬取结束')

朋友(毛写)

'''题目:爬取电影名,上映时间,类型,评分,'''
#编码格式UTF-8
'''
1.导入相应的库,request,xpath库;
2.构建请求头/cookies信息;
3.拿到并构建需要请求的网址;
4.使用request方法对网页发起请求并以字符串数据类型返回;
5.对响应进行网页加密;
6.对需要抓取的内容使用xpath定位的方式进行定位;
7.创建对应抓取数据的列表;
8.进行for循环遍历得到需要数据,之后对数据进行处理(i=i.replace(' ','').replace('\xa0','').strip('\n').split('/'))
9.以所需要的数据长度进行循环遍历并输出所需要的数据
10.清空列表之后构造第二页的网址对第二页网址再次请求,使用for循环达到自动翻页抓取其他页所需要的内容
'''

import requests
from lxml import etree
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'}
cookies='Cookie: ll="118355"; bid=AQcROvQM_-0; __utmz=30149280.1635691150.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmz=223695111.1635691150.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; _vwo_uuid_v2=DAC4AEB658F3F8304565CCBAC102645E4|b60ac4ec5c18b906c92005f0d491dcab; __gads=ID=312f4cbc309ccd40-225b041478ce004e:T=1635691211:RT=1635691211:S=ALNI_Mb_drSuv6VTfOA8K5UA66vUNdnTBw; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1636638852%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DR5QO0ju3rp727v2XkVIaGS4D1b5XNOcN93cVFB72mSVNEAEuPXTsM6sVIq6w2Dhy%26wd%3D%26eqid%3Dddb36f65000e014d00000006617eaa83%22%5D; _pk_id.100001.4cf6=4f270bc5287bb024.1635691150.3.1636638852.1635834486.; _pk_ses.100001.4cf6=*; __utma=30149280.1526461759.1635691150.1635834486.1636638852.3; __utmb=30149280.0.10.1636638852; __utmc=30149280; __utma=223695111.414137717.1635691150.1635834486.1636638852.3; __utmb=223695111.0.10.1636638852; __utmc=223695111; ap_v=0,6.0'
cookies_l = {}
for i in cookies.split('; '):
    i=i.split('=')
    cookies_l[i[0]]=i[1]
url = 'https://movie.douban.com/top250'
response =requests.get(url=url,headers=headers,cookies=cookies_l).text
#https://movie.douban.com/top250?start=25&filter=
s=0
b=1
for a in range(10):
    s+=25
    response=etree.HTML(response)
    name=response.xpath('//*[@id="content"]//div[1]/ol/li/div//a/span[1]/text()')
    count=response.xpath('//*[@id="content"]/div/div/ol/li/div/div[2]/div[2]/div/span[2]/text()')
    qita=response.xpath('//*[@id="content"]/div//ol/li/div//div[2]/p[1]/text()[2]')      #xpath返回的数据类型是列表
    riqi_list=[]
    guojia_list=[]
    leixing_list=[]
    for i in qita:
        i=i.replace(' ','').replace('\xa0','').strip('\n').split('/')
        guojia_list.append(i[1])
        riqi_list.append(i[0])
        leixing_list.append(i[2])
    for i in range(len(name)):
        with open('豆瓣电影.txt','a')as f:
            f.write('电影名字:{},评分:{},出品国家:{},上映时间:{},影片类型:{}\n'.format(name[i],count[i],guojia_list[i],riqi_list[i],leixing_list[i]))
            print('第{}部电影 电影名字:{},评分:{},出品国家:{},上映时间:{},影片类型:{}'.format(b,name[i],count[i],guojia_list[i],riqi_list[i],leixing_list[i]))
            b =b +1
    leixing_list.clear()
    riqi_list.clear()
    guojia_list.clear()
    url1 = f'https://movie.douban.com/top250?start={s}&filter='
    # print(url1)
    response =requests.get(url=url1,headers=headers,cookies=cookies_l).text
print('over!!')

这个是请求头 从浏览器 检查->network(网络)中获取
在这里插入图片描述
这个是网址解析 我们发现除第一页网址以外,之后网页就划线处数字不同
豆瓣电影top250_第1张图片
我的抓取方法是从第一步就抓取其余剩余网页的网址后半段 与第一网址组合放入一个列表中对其遍历
毛写的是改变数字每次加25进行翻页

最后新手写的 有什么写得不对不好麻烦大佬们指出
豆瓣电影top250_第2张图片

你可能感兴趣的:(爬虫学习实战,爬虫,python,数据挖掘)