IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 爬虫学习2 -> 正文阅读

[Python知识库]爬虫学习2

目录

1,requests.get()与requests.post()区别

2,爬取豆瓣电影中动作电影的排行

注1:

注2

注3

注4

练习1,获取五页贴吧

?练习2,用类与对象尝试


1,requests.get()与requests.post()区别

  • requests.get():

?response=resquests.get(url=url,headers=headers,params=params)

  • requests.post()

response=requests.post(url=url,headers=headers,data=data)?

data一般用字典方式传入?

2,爬取豆瓣电影中动作电影的排行

首先尝试之前的思路:

1,指定url

2,发起请求

3,获取响应数据

  • 使用requests.get()方法获取网页上的HTML内容
  • 通过lxml库的etree.HTML来解析这个网页结构
  • 最后通过xpath来获取自己所需内容

4,持久化存a储

let's go!

from lxml import etree
import requests

headers = {"User-Agent":
           "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Mobile Safari/537.36 Edg/96.0.1054.62"}
url = "https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action="
r = requests.get(url=url, headers=headers).text
tree = etree.HTML(r)
leaf = tree.xpath('//div[@class="movie-list-panel pictext"]//a/@href')
print(leaf)

是空字典。说明了这个数据,是不存在的! 上一篇爬不出美女的原因找到了!!!

这个网站是动态的网站,电影排名是活的。那就要用抓包工具去捕获信息

注1:

想要爬取一个网站的一系列图片,xpath要找出他们共同的路径

?

leaf = tree.xpath('//div[@class="PictureList"]/ul/li/a/@href')

leaf = tree.xpath('//div[@class="movie-list-panel pictext"]//a/@href')?

注2

用红框框框起来的地方,就是专门捕获动态响应数据的地方!

找到正确的url 。后面是传递各种参数,直接简化

?url = 'https://movie.douban.com/j/chart/top_list?'

注3

看响应,哪个包含了我们要的所有信息..第三个

?把它给服务器传递的参数单独拿出来看一看

params = {
? ? 'type':'5', # 很明显是分类
? ? 'interval_id':'100:90', # 还记得开头的好于100%-90%的动作片吗
? ? 'action':'',
? ? 'start': '0', #从第几个开始
? ? 'limit':'20' #每次读取多少个
}

?以上内容转载自(71条消息) 一起学爬虫(Python) — 07_小泽-CSDN博客

注4

?返回的文件是json格式,那我们就需要用json去解析,导入

import json

import requests
import json

params = {
    'type': '5',  # 很明显是分类
    'interval_id': '100:90',  # 还记得开头的好于100%-90%的动作片吗
    'action': '',
    'start': '0',  # 从第几个开始
    'limit': '20'  # 每次读取多少个
}
headers = {"User-Agent":
           "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Mobile Safari/537.36 Edg/96.0.1054.62"}
url = "https://movie.douban.com/j/chart/top_list?"
r = requests.get(url=url, params=params, headers=headers).content.decode()
# .content是转成二进制的意思 .decode()是指定编译格式,默认编码为字符串编码
a = json.loads(r)
# 用json模块的loads实现把爬下来的数据转换成我们能看懂的数据
print(a)

?提取得到数据,遍历a中每一个字典(复习字典用法)

import requests
import json

params = {
    'type': '5',  # 很明显是分类
    'interval_id': '100:90',  # 还记得开头的好于100%-90%的动作片吗
    'action': '',
    'start': '0',  # 从第几个开始
    'limit': '20'  # 每次读取多少个
}
headers = {"User-Agent":
           "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Mobile Safari/537.36 Edg/96.0.1054.62"}
url = "https://movie.douban.com/j/chart/top_list?"
r = requests.get(url=url, params=params, headers=headers).content.decode()
# .content是转成二进制的意思 .decode()是指定编译格式,默认编码为字符串编码
a = json.loads(r)
# 用json模块的loads实现把爬下来的数据转换成我们能看懂的数据
print(a)
# 遍历a列表中的每一个字典
for i in a:
    pingfen = i['rating'][0]
    paiming = i['rank']
    is_playable = i['is_playable']
    fenlei = i['types']
    fenleis = ''
    for a in fenlei:
        fenleis += a
        fenleis += ' '
    diqu = i['regions'][0]
    mingzi = i['title']
    riqi = i['release_date']
    zhuyan = i['actors']
    zhuyans = ''
    for b in zhuyan:
        zhuyans += b
        zhuyans += ' '

    if is_playable == True:
        zhuangtai = '可播放'
        dizhi = i['url']
        print('电影名字:'+mingzi)
        print('排名:', paiming)
        print('状态::' + zhuangtai)
        print('链接:' + dizhi)
        print('评分:' + pingfen)
        print('主演:' + zhuyans)
        print('上映日期:' + riqi + '/上映地区:' + diqu + '/分类:' + fenleis)
        print('-------------------------------------------------------------------')
    else:
        zhuangtai = '不可播放'
        print('电影名字:' + mingzi)
        print('排名:', paiming)
        print('状态::' + zhuangtai)
        print('评分:' + pingfen)
        print('主演:' + zhuyans)
        print('上映日期:' + riqi + '/上映地区:' + diqu + '/分类:' + fenleis)
        print('-------------------------------------------------------------------')

练习1,获取五页贴吧

源代码:

import requests
headers = {
    "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Mobile Safari/537.36 Edg/96.0.1054.62"}
url = 'https://tieba.baidu.com/f?kw={}&pn={}'
text = input('请输入名字:')
url_list = [url.format(text, i*50) for i in range(5)]
print(url_list)
for a in url_list:
    response = requests.get(url=a, headers=headers).content.decode()
    file_name = '第{}页贴吧'.format(url_list.index(a)+1)+'.html'
    with open(file_name, 'w', encoding='utf-8') as f:
        f.write(response)

出现问题1:列表推导式掌握不扎实?

url_list = [url.format(text, i*50) for i in range(5)]?

出现问题2:index函数用法->从列表中找出某个值第一个匹配值的索引位置

file_name='第{}页贴吧'.format(url_list.index(a)+1)+'html'

?出现问题3:用.content进行手动编码

成功!?

?练习2,用类与对象尝试(复习类与对象)

源代码:

import requests


class All(object):

    def __init__(self, text):
        self.text = text
        self.url = 'https://tieba.baidu.com/f?kw={}&pn={}'
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}

    def occur_url_list(self):
        url_list = [self.url.format(self.text, i * 50) for i in range(5)]
        return url_list

    def get(self, url):
        response = requests.get(url=url, headers=self.headers).content.decode()
        return response

    def save(self, get_text, num):
        file_name = '第{}页贴吧~'.format(num)+'.html'
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(get_text)

    def run(self):
        url_listt = self.occur_url_list()
        for a in url_listt:
            get_text = self.get(a)
            self.save(get_text, url_listt.index(a)+1)


if __name__ == '__main__':
    text = input('请输入贴吧名字:')
    a = All(text)
    c = a.run()

出现问题;

?调用类里的函数记得用self

注意传参

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:51:09  更:2022-01-01 13:53:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:46:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码