前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >一篇文章入门python爬虫(需要html,css基础)

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

作者头像
GeekLiHua
发布2025-01-21 21:27:23
发布2025-01-21 21:27:23
2700
代码可运行
举报
文章被收录于专栏:Java
运行总次数:0
代码可运行

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

代码演示

  • 创建项目
  • 首先安装requests包 pip install -i http://pypi.douban.com/simple/ requests
  • 测试代码
代码语言:javascript
代码运行次数:0
复制
# 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.
代码语言:javascript
代码运行次数:0
复制
# 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

  • 测试代码
代码语言:javascript
代码运行次数:0
复制
# 1. 导入模块
import requests

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

print(response.status_code)

运行结果 这个运行结果是418,意思是愚人节,表示网页发现了,访问这个网页的是程序,不是人类。

  • 定义请求头

在网页部分点击F12,点击网络

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

点击其中的任意一个请求

找到user-agent

把这个请求头复制到代码中。

完整代码

代码语言:javascript
代码运行次数:0
复制
# 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

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

代码语言:javascript
代码运行次数:0
复制
python.exe -m pip install bs4 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

选择需要获取的标签的情况,比如我现在想要获取这个评分,然后可以看出来,它是spanB标签下的rating_num属性

完整代码

代码语言:javascript
代码运行次数:0
复制
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)

运行结果,获取到了一页的评分情况

通过切片获取具体评分

代码语言:javascript
代码运行次数:0
复制
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标签中。

在这里插入图片描述
在这里插入图片描述

关键操作代码如下

代码语言:javascript
代码运行次数:0
复制
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

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

代码语言:javascript
代码运行次数:0
复制
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])

运行完毕,爬取成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一篇文章入门python爬虫(需要html,css基础)
    • 代码演示
    • 爬取豆瓣top250数据案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档