鱼C论坛

 找回密码
 立即注册
查看: 3074|回复: 7

[已解决]【小白爬虫问题】转换各式

[复制链接]
发表于 2022-8-6 23:33:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这段代码第8行有问题
  1. import requests
  2. from bs4 import BeautifulSoup

  3. url="https://s.weibo.com/top/summary?cate=realtimehot"
  4. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"}

  5. response=requests.get(url,headers=headers)
  6. content=response.content.decode('utf-8')
  7. soup=BeautifulSoup(content,'lxml')
复制代码

报错:
  1. Traceback (most recent call last):
  2.   File "D:/py/访问微博热搜.py", line 8, in <module>
  3.     content=response.content.decode('utf-8')
  4. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 339: invalid continuation byte
复制代码


把第8行换了后就好了
  1. import requests
  2. from bs4 import BeautifulSoup

  3. url="https://s.weibo.com/top/summary/"
  4. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"}

  5. response=requests.get(url,headers=headers)
  6. content=response.encoding='utf-8'
  7. soup=BeautifulSoup(content,'lxml')
  8. print(soup)
复制代码

不过打印结果是这个
  1. <html><body><p>utf-8</p></body></html>
复制代码

我想要的是源代码

大佬们能解释一下第八行和第九行是什么意思吗
该怎么处理
谢谢大家
最佳答案
2022-8-7 01:41:07
hello? 发表于 2022-8-7 00:16
好像不对头

好像cookie加不加都可以,去掉还是可以打印出来

第八行不懂。。。网页采取的编码一般都是 utf8
第九行就是获取 lxml
还是得加 cookie,不然微博有反爬,中途可以print一下soup的类型,就知道soup是什么了(就是bs4的类)
然后是可以正常使用的
  1. import requests
  2. from bs4 import BeautifulSoup

  3. url="https://s.weibo.com/top/summary?cate=realtimehot"
  4. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77",
  5.          "cookie":cookie}

  6. response=requests.get(url,headers=headers)
  7. content = response.text
  8. soup=BeautifulSoup(content,'lxml')
  9. print(type(soup)) # <class 'bs4.BeautifulSoup'>
  10. for i in soup.find_all("td", class_ = "td-02"):
  11.     print(i.a.text)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-6 23:34:34 | 显示全部楼层
题目打错了,格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-6 23:38:05 | 显示全部楼层
这个网站登进去的时候好像是要用鼠标手动点一下屏幕才可以正式登上。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-6 23:40:17 | 显示全部楼层
加一个cookie 参数就好了
  1. from requests import get
  2. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"
  3.         ,"cookie":cookie
  4.          }
  5. res = get("https://s.weibo.com/top/summary?cate=realtimehot", headers = headers)
  6. print(res.text)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-7 00:16:22 | 显示全部楼层
liuzhengyuan 发表于 2022-8-6 23:40
加一个cookie 参数就好了

好像不对头
  1. from requests import get
  2. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77"}
  3. res = get('https://s.weibo.com/top/summary/', headers = headers)
  4. print(res.text)
复制代码

好像cookie加不加都可以,去掉还是可以打印出来
不过我疑惑第题目中8,9行什么意思
  1. content=response.content.decode('utf-8')
  2. soup=BeautifulSoup(content,'lxml')
复制代码

就是这两行
第八行是把格式改为为utf-8吗,response.content.decode('utf-8')和response.encoding('utf-8')有区别没呢
那第九行又是什么意思呢
最主要的是它还报错了
这个代码是我在b站某up的教学视频抄的,时间是2020-4-29
我怀疑是不是bs4更新了,不过官方文档我看不太懂
我本人问题有点多,请大佬包容一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-7 01:25:29 | 显示全部楼层
liuzhengyuan 发表于 2022-8-6 23:40
加一个cookie 参数就好了
  1. content=response.content.decode('utf-8')
复制代码

我似乎找到答案了,应该是将utf-8改为gbk
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-7 01:41:07 | 显示全部楼层    本楼为最佳答案   
hello? 发表于 2022-8-7 00:16
好像不对头

好像cookie加不加都可以,去掉还是可以打印出来

第八行不懂。。。网页采取的编码一般都是 utf8
第九行就是获取 lxml
还是得加 cookie,不然微博有反爬,中途可以print一下soup的类型,就知道soup是什么了(就是bs4的类)
然后是可以正常使用的
  1. import requests
  2. from bs4 import BeautifulSoup

  3. url="https://s.weibo.com/top/summary?cate=realtimehot"
  4. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77",
  5.          "cookie":cookie}

  6. response=requests.get(url,headers=headers)
  7. content = response.text
  8. soup=BeautifulSoup(content,'lxml')
  9. print(type(soup)) # <class 'bs4.BeautifulSoup'>
  10. for i in soup.find_all("td", class_ = "td-02"):
  11.     print(i.a.text)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-7 02:05:12 | 显示全部楼层
hello? 发表于 2022-8-7 01:25
我似乎找到答案了,应该是将utf-8改为gbk

可以!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表