豆瓣电影top250信息爬取——xpath解析(适合初学者)

目录

一、效果展示

二、爬取过程

1.运用工具

2.代码撰写

1.导入所需模块

2.获取网址

3.进行UA伪装

4.翻页功能实现

5.利用requests获取html

6.利用xpath进行解析获取top250电影名称name_list与详情页链接url_list

7.将数据导出为csv文件

三、完整代码展示

四、Excel数据清洗整理

 

一、效果展示

豆瓣电影top250信息爬取——xpath解析(适合初学者)_第1张图片

二、爬取过程

1.运用工具

1.python3.10

2.requests

3.xpath

2.代码撰写

1.导入所需模块

import requests
from lxml import etree
import pandas as pd

2.获取网址

url='https://movie.douban.com/top250'

3.进行UA伪装

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'}

获取方式:

(1)网页界面单击鼠标右键

(2)选择“检查”

(3)选择“Network”

(4)按住F5进行刷新

(6)选择如图所示第一项

豆瓣电影top250信息爬取——xpath解析(适合初学者)_第2张图片

(7)划到最底部,复制粘贴如图最后一项即可豆瓣电影top250信息爬取——xpath解析(适合初学者)_第3张图片

4.翻页功能实现

观察翻页时网址内容变化:

第一页:https://movie.douban.com/top250

第二页:https://movie.douban.com/top250?start=25&filter=

第三页:https://movie.douban.com/top250?start=50&filter=

推测第一页时start=0,实验过后确实如此,所以翻页功能可以利用for循环实现,利用range以25为间隔使start后的值依次等于0,25,50……,代码如下:

for num in range(0,250,25):
    newurl='https://movie.douban.com/top250'+f'?start={num}&filter='

5.利用requests获取html

html=requests.get(url=newurl,headers=headers).text

6.利用xpath进行解析获取top250电影名称name_list与详情页链接url_list

jx=etree.HTML(html)

(1)获取电影名称

name=jx.xpath('//div[@class="hd"]//span[@class="title"]/text()')

由于所选区域包含不需要的内容豆瓣电影top250信息爬取——xpath解析(适合初学者)_第4张图片

所以需要利用for循环把多余数据删除

name_list=[]
     for i in name:
         if "/" in i:
             continue
         else:
             name_list.append(i)

name_list输出内容展示:

豆瓣电影top250信息爬取——xpath解析(适合初学者)_第5张图片

(2)获取电影详情页链接

url_list=jx.xpath('//div[@class="hd"]//a/@href')

7.将数据导出为csv文件

all_data=pd.DataFrame({'电影名称':name_list,'详情页网址':url_list})
all_data.to_csv('D:/豆瓣电影top250信息.csv',mode='a',encoding='utf-8-sig')

注意:encoding不要用utf-8,否则用Excel打开时会显示乱码

三、完整代码展示

import requests
from lxml import etree
import pandas as pd
# url='https://movie.douban.com/top250'
for num in range(0,250,25):
    newurl='https://movie.douban.com/top250'+f'?start={num}&filter='
    # 利用headers伪装成普通浏览器访问
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/119.0.0.0 Safari/537.36'}
    html=requests.get(url=newurl,headers=headers).text
    # print(html)
    jx=etree.HTML(html)
    name=jx.xpath('//div[@class="hd"]//span[@class="title"]/text()')
    # print(name)
    name_list=[]
    for i in name:
        if "/" in i:
            continue
        else:
            name_list.append(i)
    # print(name_list)
    url_list=jx.xpath('//div[@class="hd"]//a/@href')
    # print(url_list)
    all_data=pd.DataFrame({'电影名称':name_list,'详情页网址':url_list})
    all_data.to_csv('D:/豆瓣电影top250信息.csv',mode='a',encoding='utf-8-sig')

四、Excel数据清洗整理

豆瓣电影top250信息爬取——xpath解析(适合初学者)_第6张图片豆瓣电影top250信息爬取——xpath解析(适合初学者)_第7张图片

python输出的原表格会存在表头重复、序号排列和一个异常值的问题

快速解决表头重复问题:数据——删除重复值——全选(不要勾选数据包含标题)

序号排列:填充前两个单元格1,2后选中后双击

异常值处理:返回原网址经查验后发现该处有电影,将名字粘贴上去

最终得出开头展示的完整表格。

 

你可能感兴趣的:(爬虫)