【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法

【写在前面】

在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9),如下图所示:

网上 查找了一些方法,以为是遇到了网站加密处理。后来发现 通过F12还 是能获取网页的元素,那么有什么办法能规避乱码问题呢?答案是:用selenium.

【效果如下】

【示例代码】

# coding=utf-8
# @Auther : "鹏哥贼优秀"
# @Date : 2019/10/16
# @Software : PyCharm

from selenium import webdriver

url = 'https://blog.csdn.net/yuzipeng'
driver = webdriver.Chrome("F:\\Python成长之路\\chromedriver.exe")
driver.get(url)
urls = driver.find_elements_by_xpath('//div[@class="article-item-box csdn-tracking-statistics"]')
blogurl = ['https://blog.csdn.net/yuzipeng/article/details/' + url.get_attribute('data-articleid') for url in urls]
titles = driver.find_elements_by_xpath('//div[@class="article-item-box csdn-tracking-statistics"]/h4/a')
blogtitle = [title.text for title in titles]
myblog = {k:v for k,v in zip(blogtitle,blogurl)}
for k,v in myblog.items():
    print(k,v)
driver.close()

 

【知识点】

1、selenium使用

基本的selenium安装方法、使用方法(如查找元素的各类函数)可以详见之前的博客《【Python成长之路】从零学爬虫--给微信公众号阅读量作个弊:刷阅读量》(https://blog.csdn.net/yuzipeng/article/details/100179696

 

2、推导式使用

(1)列表推导式:[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

         类似这样就可以实现将for循环的多行程序浓缩到一句代码 中,如

blogtitle = [title.text for title in titles]

而如果用for循环写,则需要这样:

blogtitle = []
for title in titles:
    blogtitle.append(title)

(2)字典推导式:{ key表达式: value表达式 for value in collection if condition }​​​​​​​

这样的写法,一般用于key和value能相互转换;但是如果key和value是完全不同的列表,那就需要用zip对key/value进行整合。

myblog = {k:v for k,v in zip(blogtitle,blogurl)}

如果对zip函数不熟悉,可以用下面的例子来 介绍下。

a = ['a', 'b', 'c']
b = [1, 2, 3]
c = {k: v for k, v in zip(a, b)}
print(c)

结果是:{'a': 1, 'b': 2, 'c': 3}

 

【关于鹏哥】

“鹏哥贼优秀”的公众号,有兴趣的同学可以关注,一起学习进步。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果爬虫获取的数据是乱码,可以尝试以下方法: 1. 确认爬虫获取的数据的编码方是否正确,常见的编码方包括UTF-8、GB2312等。可以使用Python自带的chardet来检测编码方,并将数据按照正确的编码方解码。 2. 如果数据本身就是乱码,可能是因为网站使用了反爬虫技术,可以尝试使用代理IP或者更换请求头来规避反爬虫策略。 3. 如果数据中包含了特殊字符,可以尝试使用正则表达或者字符串处理函数来进行清洗和提取。 4. 如果以上方法均无效,可以考虑联系网站管理员或者寻找其他数据源。 ### 回答2: 如果爬虫获取的数据是乱码,可以考虑以下几个解决办法: 1. 设置合适的编码方爬虫在请求网页时,可以在HTTP请求的header中指定编码方,例如UTF-8或者GBK等,尝试使用不同的编码方来获取网页内容,看看是否能够正确解析数据。 2. 转换编码:如果爬虫已经获取到了乱码数据,可以尝试使用不同的编码方进行转换。一种常见的方法是使用Python的encode和decode方法,尝试将数据从原先的编码方转换为目标编码方。 3. 使用合适的解析:如果数据仍然是乱码,可能是因为选择了不合适的解析。可以尝试使用更加专业的解析,例如Beautiful Soup或者lxml,这些通常具有更好的编码处理能力。 4. 检查网页内容:乱码的原因可能是网页本身编码混乱或者不规范,可以先检查网页源代码中是否有指定正确的编码方,例如<meta>标签中的charset属性。如果网页编码被正确指定,则修改爬虫代码以正确解析数据。 5. 清洗数据:在爬虫获取到数据后,可以对数据进行清洗和过滤,去除包含乱码的部分。可以使用正则表达方法匹配和删除乱码字符。 综上所述,爬虫获取的数据是乱码时,可以尝试设置合适的编码方、转换编码、使用专业的解析、检查网页内容和清洗数据等方法解决问题。 ### 回答3: 爬虫获取的数据乱码在实际开发中是一个比较常见的问题。造成数据乱码的原因可能是编码设置错误、网页编码不一致或是被压缩加密等。以下是解决数据乱码问题的一些方法: 1. 设置正确的编码:可以通过设置请求的编码方,使之与被请求的网页编码一致。常见的编码方有UTF-8、GBK等。通过设置合适的编码方爬虫获取的数据就可以正确解码显示。 2. 使用适当的解码:在处理解码问题时,可以借助一些解决。例如,在Python中,可以使用chardet来检测文本的编码格,并且使用相应的解码方进行解码。 3. 处理特殊字符:有些网页中可能会存在一些特殊字符,导致解码时出现乱码。可以使用正则表达方法,将这些特殊字符进行替换或删除,从而得到正确的数据。 4. 使用代理服务器:有的网站可能会对爬虫进行反爬虫策略,并进行数据加密或压缩,导致获取到的数据是乱码。可以使用代理服务器,通过改变请求的来源IP地址,来规避这些限制。 5. 调整爬虫速度:有时候,过快的爬取速度也可能导致获取到的数据是乱码。可以适当调整爬虫的速度,降低请求频率,以减少服务器负载,从而得到正确的数据。 总结来说,解决爬虫获取到的数据乱码问题需要确定正确的编码方,使用合适的解码,处理特殊字符,使用代理服务器以及调整爬虫速度等方法。根据具体情况采取不同的解决方案,可以有效解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值