python爬取豆瓣电影top250-python实战项目,手把手教学,附源码

目录

  • 1、分析网页
  • 2、请求服务器
    • 2.1导入包
    • 2.2设置浏览器代理
    • 2.3请求服务器格式
    • 2.4请求服务器代码汇总
  • 3.xpath提取信息
    • 3.1获取xpath节点的方法
    • 3.2xpath提取内容
    • 3.2.1提取文本
    • 3.2.2提取链接
    • 3.2.3提取标签元素
  • 4.正则表达式
    • 4.1提取固定位置的信息
    • 4.2匹配出数字
  • 5、提取一页中的所有信息
  • 6、把内容写入文本csv
  • 7、把所有代码汇总

1、分析网页

当我们去爬取网页时,首先要做的就是先分析网页结构,然后就会发现相应的规律,如下所示:
在这里插入图片描述
生成链接:从网页链接的规律中可得写一个for循环即可生成它的链接,其中它的间隔为25,程序如下:

for page in range (0,226,25):
    url ="https://movie.douban.com/top250?start=%s&filter="%page
    print (url)

得到的结果如下:
在这里插入图片描述

2、请求服务器

在爬取网页之前,我们要向服务器发出请求

2.1导入包

没有安装requests包的要先进行安装,步骤为:1.win+R运行——2.cmd回车——3.输入命令pip install requests

2.2设置浏览器代理

在这里插入图片描述

设置浏览器代理的代码如下:

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

2.3请求服务器格式

请求源代码,向服务器发出请求,如果在后面加上.text表示输出文本内容,代码如下图所示:

requests.get(url = test_url, headers = headers)


2.4请求服务器代码汇总

import requests
#pip安转 pip install requests————>win+r,运行————>cmd,回车,————>pip
test_url = 'https://movie.douban.com/top250?start=0&filter=' #''格式化,为字符串

#设置浏览器代理,它是一个字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

#请求源代码,向服务器发出请求,200代表成功
reponse = requests.get(url = test_url, headers = headers).text
# 快捷键运行,Ctrl+Enter

3.xpath提取信息

3.1获取xpath节点的方法

在这里插入图片描述

3.2xpath提取内容

from lxml import etree #导入解析库
html_etree = etree.HTML(reponse) # 看成一个筛子,树状

3.2.1提取文本

当我们在提取标签内的文本时,要在复制的xpath后面加上/text()
如《霸王别姬》:

<span class="title">霸王别姬</span>

xpath为:

//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

提取文字:

name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')
print ("这是数组形式:",name)
print ("这是字符串形式:",name[0])

3.2.2提取链接

我们在提取链接时,需要在复制到的xpath后面加上/@href , 指定提取链接,

movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')
print ("这是数组形式:",movie_url)
print ("这是字符串形式:",movie_url[0])

结果如下:
在这里插入图片描述

3.2.3提取标签元素

提取标签元素和提取链接的方法一样,不过要在后面加上 /@class 就可以了,

rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')
print ("这是数组形式:",rating)
print ("这是字符串形式:",rating[0])

结果如下:
在这里插入图片描述

4.正则表达式

4.1提取固定位置的信息

正则表达式中用(.*?)来提取我们想要的信息,在使用正则表达式时,通常要先导入re这个包,举例如下:

import re
test = "我是js"
text = re.findall("我是.*?",test)
print (text)

结果如下:
在这里插入图片描述

4.2匹配出数字

比如说我们要匹配出有多少人评价这部电影,我们可以这样写:

import re 
data = "1059232人评价"
num = re.sub(r'\D', "", data)
print("这里的数字是:", num)

结果如下:
在这里插入图片描述

5、提取一页中的所有信息

比如说我们这里提取最后一页的电影名称,如下:

li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
for item in li:
    name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
    print (name)

结果如下:
在这里插入图片描述

按照这种方法,我们可以把所有的都爬取下来。

6、把内容写入文本csv

代码如下:

import csv
# 创建文件夹并打开
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入

# 写入内容
writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))

#关闭文件
fp.close()


7、把所有代码汇总

import requests, csv, re
from lxml import etree

#设置浏览器代理,它是一个字典
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}

# 创建文件夹并打开
fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')
writer = csv.writer(fp) #我要写入
# 写入内容
writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))

for page in range(0, 226, 25): #226
    print ("正在获取第%s页"%page)
    url = 'https://movie.douban.com/top250?start=%s&filter='%page
    
    #请求源代码,向服务器发出请求,200代表成功,回退对其,Ctrl+]
    reponse = requests.get(url = url, headers = headers).text
    # 快捷键运行,Ctrl+Enter
    html_etree = etree.HTML(reponse) # 看成一个筛子,树状
    # 过滤
    li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')
    for item in li:
        #排名
        rank = item.xpath('./div/div[1]/em/text()')[0]
        #电影名称
        name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]
        #链接
        dy_url = item.xpath('./div/div[2]/div[1]/a/@href')[0]
        #评分
        rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]
        rating = re.findall('rating(.*?)-t', rating)[0]
        if len(rating) == 2:
            star = int(rating) / 10  #int()转化为数字
        else:
            star = rating
    #     注释ctrl+?

        rating_num = item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0]
        content = item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]
        content = re.sub(r'\D', "", content)
#         print (rank, name, dy_url, star, rating_num, content)
        # 写入内容
        writer.writerow((rank, name, dy_url, star, rating_num, content))
fp.close()


结果如下:
在这里插入图片描述

csv文件中的结果:
在这里插入图片描述

最后爬取结束。

需要代码的扫下方图片无偿获取哦~

在这里插入图片描述

如有侵权,请联系删除。

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python爬取网页内容源码,可以使用urllib模块中的urlopen函数来打开网址并读取源代码。以下是一个示例代码: ```python import urllib.request def grab(url): # 打开传入的网址 resp = urllib.request.urlopen(url) # 读取网页源码内容 data = resp.read() # 输入存储文件名 name = input("请定义文件名:") # 打开文件 file_name = open(name, "wb") # 将代码写入文件 file_name.write(data) # 关闭文件 file_name.close() print("下载源码完成") if __name__ == '__main__': # 按照格式输入网址 web_addr = input("请输入你要抓取的网址(例如http://www.baidu.com/):") try: grab(web_addr) except: print("网址输入有误") ``` 这段代码中,我们定义了一个`grab`函数,它接受一个网址作为参数。函数内部使用`urlopen`函数打开网址并读取源代码,然后将源代码写入一个本地文件中。你可以根据需要修改文件名和存储路径。运行这段代码后,输入你要抓取的网址,即可将网页内容源码保存到本地文件中。 #### 引用[.reference_title] - *1* [python-爬虫(最后爬取数据的源码)](https://blog.csdn.net/iconada/article/details/121895984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [python爬虫入门篇------爬取网页源代码](https://blog.csdn.net/wf134/article/details/78554764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [实战|手把手教你用Python爬虫(详细源码)](https://blog.csdn.net/m0_59162248/article/details/128682228)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值