一篇文章入门python爬虫(需要html,css基础)

一篇文章入门python爬虫(需要html,css基础)

代码演示

  • 创建项目
    在这里插入图片描述

  • 首先安装requests包
    pip install -i http://pypi.douban.com/simple/ requests
    在这里插入图片描述

  • 测试代码

# 1. 导入模块
import requests

# 2. 发送请求,获取响应
response = requests.get("http://books.toscrape.com/") # 这是一个用于测试的网络链接

# 3. 打印响应体
print(response)
# 打印响应码
print(response.status_code)

print(response.content.decode())

运行结果
在这里插入图片描述

  • 爬虫练习
    response.ok只要是响应码是可以的,响应可以通过,那么就响应成功,然后我们打印返回结果,response.text.
# 1. 导入模块
import requests

# 2. 发送请求,获取响应
response = requests.get("http://books.toscrape.com/") # 这是一个用于测试的网络链接

if response.ok:
    print(response.text)
else:
    print("请求失败")

运行结果

在这里插入图片描述

爬取豆瓣top250数据案例

案例演示网址https://movie.douban.com/top250
在这里插入图片描述

  • 测试代码
# 1. 导入模块
import requests

# 2. 发送请求,获取响应
response = requests.get("https://movie.douban.com/top250") # 这是一个用于测试的网络链接

print(response.status_code)

运行结果
这个运行结果是418,意思是愚人节,表示网页发现了,访问这个网页的是程序,不是人类。
在这里插入图片描述

  • 定义请求头

在网页部分点击F12,点击网络
在这里插入图片描述

刷新网页,可以看见很多发送的请求

在这里插入图片描述

点击其中的任意一个请求

在这里插入图片描述

找到user-agent

在这里插入图片描述
把这个请求头复制到代码中。
在这里插入图片描述

完整代码

# 1. 导入模块
import requests

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69"
}
# 2. 发送请求,获取响应
response = requests.get("https://movie.douban.com/top250", headers = headers) # 这是一个用于测试的网络链接

print(response.status_code)

运行结果
在这里插入图片描述

  • BeautifulSoup库来解析网页源码

  • 首先安装bs4包
    pip install -i http://pypi.douban.com/simple/ bs4

如果上面命令安装失败,那么使用这个命令

python.exe -m pip install bs4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

在这里插入图片描述

选择需要获取的标签的情况,比如我现在想要获取这个评分,然后可以看出来,它是spanB标签下的rating_num属性
在这里插入图片描述
完整代码

import requests
from bs4 import BeautifulSoup

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69"
}
# 2. 发送请求,获取响应
response = requests.get("https://movie.douban.com/top250", headers = headers) # 这是一个用于测试的网络链接

content = response.text

# 获取文本的树状结构
soup = BeautifulSoup(content,"html.parser")

# 获取评分集合
all_rating_nums = soup.findAll("span", attrs={"class", "rating_num"})
for rating_num in all_rating_nums:
    print(rating_num)

运行结果,获取到了一页的评分情况
在这里插入图片描述

通过切片获取具体评分

import requests
from bs4 import BeautifulSoup

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69"
}
# 2. 发送请求,获取响应
response = requests.get("https://movie.douban.com/top250", headers = headers) # 这是一个用于测试的网络链接

content = response.text

# 获取文本的树状结构
soup = BeautifulSoup(content,"html.parser")

# 获取评分集合
all_rating_nums = soup.findAll("span", attrs={"class", "rating_num"})
for rating_num in all_rating_nums:
    print(rating_num.string)

运行结果
在这里插入图片描述

现在我想要获取每一部的与评分相结合的情况。
获取作品姓名代码

首先是观察作品名字的盒子信息,可以知道的是hd这个盒子下的,a标签中。
在这里插入图片描述
在这里插入图片描述

关键操作代码如下

all_titles = soup.findAll("div", attrs={"class", "hd"})
for title in all_titles:
    all_links = title.findAll("span", attrs={"class", "title"})
    for link in all_links:
        print(link.string.split("/")[0])

运行结果
在这里插入图片描述

  • 分页操纵获取全部
    观察这个分页情况,还有页面情况,url情况,一共有10页,每页25个
    在这里插入图片描述

在这里插入图片描述

我们换页之后的样子
在这里插入图片描述
直接用这个链接也可以的
https://movie.douban.com/top250?start=25

然后这个就知道怎么写了,通过一个循环不断的设置新的地址,然后爬取十次就可以了,然后完整代码如下。

import requests
from bs4 import BeautifulSoup

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69"
}

for i in range(0, 251, 25):
    url = "https://movie.douban.com/top250?start=" + str(i)
    # 2. 发送请求,获取响应
    response = requests.get(url, headers = headers) # 这是一个用于测试的网络链接

    content = response.text
    # 获取文本的树状结构
    soup = BeautifulSoup(content,"html.parser")

    # 获取评分集合
    # all_rating_nums = soup.findAll("span", attrs={"class", "rating_num"})
    # for rating_num in all_rating_nums:
    #     print(rating_num.string)

    all_titles = soup.findAll("div", attrs={"class", "hd"})
    for title in all_titles:
        all_links = title.findAll("span", attrs={"class", "title"})
        for link in all_links:
            print(link.string.split("/")[0])

运行完毕,爬取成功
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客李华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值