爬虫练习

本文介绍了Python爬虫过程中遇到的非法多字节序列问题及其解决方法,包括通过设置编码和解码方式来避免乱码。同时,展示了如何爬取百度产品页面和新浪新闻指定内容,讲解了GET请求中params参数的使用,以及处理编码错误的技巧。
摘要由CSDN通过智能技术生成

小白爬虫学习之路···
illegal multibyte sequence问题解决办法···

爬虫练习(百度产品以及新浪新闻关键词)

注:广搜索,细学习。

一、百度产品网页
打开网页之后呢,就进入百度产品的搜索页面了;
网站首页

# ------------------------------------------------1.导包
import requests

# -------------------------------------------------2.确定url
start_url = 'https://www.baidu.com/more/'
# ----------------------------------------------3.发送请求,获取响应
response = requests.get(start_url)
# -----------------------------------------------4.查看页面内容,可能出现乱码,查看编码格式。
#print(response.text)
#print(response.encoding)
# 5.解决乱码
# ---------------------------方法一:转换成utf-8格式
# response.encoding='utf-8'
# print(response.text)
# -------------------------------方法二:解码为utf-8
with open('index.html', 'w', encoding='utf-8') as fp:
    fp.write(response.content.decode('utf-8'))
print(response.status_code)
print(response.headers)
print(type(response.text))
print(type(response.content))

二、新浪新闻——指定搜索内容的爬取

import requests

# ------------------爬取带参数的get请求-------------------爬取新浪新闻,指定的内容
# 1.寻找基础url
url = 'https://search.sina.com.cn/?'
# 2.设置headers字典和params字典,再发请求
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
}
key = '李小龙'  # 搜索内容
params = {
    'q': key,
    'c': 'news',
    'from': 'channel',
    'ie': 'utf-8'
}
response = requests.get(url, headers=headers, params=params)
print(response.text)
print(response.url)
# 第二个参数 'w' 表示写入文件中的内容是字符串格式,所以要有第3个参数,指定写入字符串的编码。网页编码在<meta>标签中查看
with open('sina_news.html', 'w', encoding='gbk',errors='ignore') as fp:
    # 写入文件的要对response对象进行二进制读取,之后再以对应编码进行解码
    fp.write(response.content.decode('utf-8'))

get 方法是可以向服务器发送信息的,除了可以请求需要的页面之外,也可以发送我们指定的内容,这就是通过 params 参数实现的。
request库 ----- get方法 ----- params
这个 params 参数是字典结构,前面说到的 headers 其实也是字典结构,但它们传输的时候是以 json 的方式传输的~~~

首先我们构建一个字典,里面写上我们想要发送的信息,网站会根据我们发送的内容返回对应的信息,但是获取到的不是网站源码。

程序刚开始执行的时候呢报错如下:
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x99 in position 958: illegal multibyte sequence
在网上搜索的,在open语句里面加入(errors=‘ignore’)就可以了,但是上面加入之后还报错,这个时候把write里面的编码格式"gbk"改为"utf-8",便不会报错了。(上面代码这里已改)
打开响应的url页面,便可以看到最新的关于“李小龙”三字进行的搜索:
关于李小龙三字在新浪新闻上的搜索

天很冷,好冻手,我再看看params参数的使用···

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值