ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

requests、bs4总结和作业

2022-03-21 20:03:19  阅读:264  来源: 互联网

标签:bs4 标签 作业 url result print requests select


requests、bs4总结和作业

一、requests的用法

requestsPython用于网络(http)请求的第三库,也是爬虫获取网络数据的重要工具

1. 向目标地址(网络地址)发送请求
requests.get(url,*,headers, proxies, timeout)   -  以指定的方式给地址发送网络请求,返回值是服务器返回的响应对象

参数说明:
url  -  字符串;请求的网络地址,可能是目标网站的网址也可能是数据接口
headers  -  字典;请求头,用于伪装浏览器设置user-agent、完成自动登录设置cookie
proxies  -  字典;设置代理ip(ip地址被封的时候使用)
timeout  -  数字;设置超时时间
url = 'https://search.51job.com/list/000000,000000,0000,00,9,99,数据分析,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='
headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
response = requests.get(url, headers=headers)
#2. 获取响应头
print(response.headers)
#3. 设置响应的编码方式(在获取请求结果乱码的时候使用)
response.encoding = 'gbk'
# 4.获取请求结果
# 1)获取字符串格式的结果(爬网页)
print(response.text)

# 2) 获取二进制格式的结果(爬图片、视频、音频)
print(response.content)

# 3)获取json解析的结果(爬接口数据)
print(response.json())

二、爬网页

import requests

url = 'https://cd.zu.ke.com/zufang'
response = requests.get(url)
print(response.text)

三、下载图片

import requests

# 1. 对图片地址发送请求
url = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'
response = requests.get(url)

# 2. 保存图片数据到本地
open('files/a.png', 'wb').write(response.content)

四、json接口数据

import requests
import os

url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
response = requests.get(url)

count = 0
for hero in response.json()['hero']:
    print(hero['name'])
    a_url = hero['selectAudio']
    res = requests.get(a_url)
    open(f'files/{os.path.basename(a_url)}', 'bw').write(res.content)
    count += 1
    if count == 10:
        break

五、bs4的用法

from bs4 import BeautifulSoup
注意:安装第三方库的时候安装beautifulSoup4而不是bs4
#1. 创建BeautifulSoup对象
#BeautifulSoup(html代码, 'lxml')   -  返回网页对象
html = open('files/05css选择器(重要).html',encoding='utf-8').read()
soup = BeautifulSoup(html, 'lxml')
# 2. 获取标签
# 1) 基于整个网页获取标签
# BeautifulSoup对象.select(css选择器)   -   返回css选择器在整个网页中选中的所有标签;返回值是列表,列表中元素是标签对象
# BeautifulSoup对象.select_one(css选择器)  -  返回css选择器在整个网页中选中的第一个标签,返回值是标签对象
result = soup.select('p')
print(result)

result = soup.select('.c1')
print(result)

# 2)基于指定标签获取标签
# 标签对象.select(css选择器)   -   在指定标签中按照选择器选中相关标签
# 标签对象.select_one(css选择器)
div1 = soup.select_one('#box')
result = div1.select('p')
print(result)
# 3.获取标签内容和标签属性值
# 1)获取标签内容:
# 标签对象.text
result = soup.select_one('#p2').text
print(result)   # 我是段落2

# 获取所有p标签的标签内容
for p in soup.select('p'):
    print(p.text)

# 2)获取标签属性
# 标签对象.attrs[属性名]
result = soup.select_one('#a1').attrs
print(result)       # {'id': 'a1', 'href': 'https://www.baidu.com'}
result = soup.select_one('#a1').attrs['href']
print(result)       # 'https://www.baidu.com'

作业

#爬取豆瓣排名前250的电影信息
import requests
from bs4 import BeautifulSoup
from re import search
import csv
import time


def get_one_page(page):
    headers = {
        'cookie': 'bid=g16urOELfcQ; douban-fav-remind=1; __gads=ID=3f57e16f48f82cf2-2222dd78d6d0003d:T=1646561716:RT=1646561716:S=ALNI_MZc-Jdw3ejofw4l88N8mdU7MdYYzg; ll="118318"; __utma=30149280.808328653.1646561718.1646561718.1646561718.1; __utmz=30149280.1646561718.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ct=y; dbcl2="222590700:fEe+R6RmPAA"; ck=4rf3; push_noty_num=0; push_doumail_num=0',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
    }
    url = f'https://movie.douban.com/top250?start={page * 25}&filter='
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, 'lxml')
    all_li = soup.select('.grid_view>li')
    all_data = []
    for li in all_li:
        # 电影名
        name = li.select_one('.title').text
        result = li.select_one('.bd>p').text.strip().replace(' ', '')
        # print('==============================================')
        # print(result)
        # 导演
        director = search(r'导演:(.+?)\s', result).group(1)
        # 主演
        actor = search(r'主演:(.+?)\s', result)
        if actor:
            actor = actor.group(1)

        # 上映时间
        time = search(r'\n(\d+).*?/', result).group(1)
        # 国家
        country = search(r'\n.+?/\s*(.+?)\s*/', result).group(1)
        # print(country)
        # 类型
        type = search(r'/.+?/\s*(.+?)$', result).group(1)
        # print(type)
        # 评分
        score = li.select_one('.rating_num').text
        # 人数
        comment_num = li.select('.star>span')[-1].text
        comment_num = search(r'\d+', comment_num).group()
        # 图片地址
        img_url = li.select_one('.pic img').attrs['src']

        # 保存数据
        all_data.append([name, director, actor, time, country, type, score, comment_num, img_url])

    writer = csv.writer(open('files/电影.csv', 'a', encoding='utf-8', newline=''))
    if page == 0:
        writer.writerow(['电影名称', '导演', '主演', '上映时间', '国家', '类型', '评分', '评论人数', '封面地址'])
    writer.writerows(all_data)
    print(f'==========第{page+1}页获取成功===========')


if __name__ == '__main__':
    for page in range(10):
        get_one_page(page)
        time.sleep(1)

标签:bs4,标签,作业,url,result,print,requests,select
来源: https://blog.csdn.net/tw19980305/article/details/123644381

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有