小白爬虫学习之路···
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参数的使用···