鱼C论坛

 找回密码
 立即注册
查看: 1861|回复: 5

视频53课 抓取网站内容之【百度】

[复制链接]
发表于 2017-12-14 11:17:07 | 显示全部楼层 |阅读模式

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

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

x
先贴代码吧,其实除了百度之外,其他数据都正常:
  1. import urllib.request
  2. import chardet

  3. def main():
  4.    
  5.     lower = 0
  6.     webs_path = 'F:\\Python\\爬虫\\URL\\urls.txt'
  7.    
  8.     with open(webs_path) as f:
  9.         for eachline in f:
  10.             url = eachline
  11.             print(url)

  12.             ##读取网页内容
  13.             with urllib.request.urlopen(url) as u:
  14.                 content = u.read()                    

  15.             #识别网页编码
  16.             encode0 = chardet.detect(content)['encoding']
  17.             confi = chardet.detect(content)['confidence']
  18.             #detect返回字典,例如{'encoding': 'utf-8', 'confidence': 0.99}

  19.             print(encode0)

  20.             
  21.             if encode0 == 'GB2312':
  22.                 encode0 = 'GBK'    ##对于GB2312的编码方式,改为GBK。

  23.             if encode0 == 'UTF-8-SIG':
  24.                 encode0 = 'UTF-8'    ##对于UTF-8-SIG的编码方式,改为UTF-8。

  25.             print('该网页使用的编码是:%s' %encode0)
  26.             print('编码可信度为:{:.00%}\n'.format(confi))
  27.                

  28.             lower +=1   #改变txt名字
  29.             web_path = 'F:\\Python\\爬虫\\URL\\url_'+str(lower)+'.txt'

  30.             content_en=content.decode(encode0,'ignore')  ##解码
  31.             print(type(content_en))

  32.             with open(web_path,'w',encoding=encode0) as fw:
  33.                 fw.write(content_en)   ##写入时需要先解码
  34.                              

  35. if __name__ == '__main__':
  36.     main()
复制代码


百度111kb的文件大小,结果才显示了两行代码,是做了特殊的加密吗?
url.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-14 11:54:09 | 显示全部楼层
百度当然不是你随便就能爬的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-14 13:09:50 | 显示全部楼层
BngThea 发表于 2017-12-14 11:54
百度当然不是你随便就能爬的

哈哈,有爬的思路吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-14 16:54:40 | 显示全部楼层
勉强看懂了
提供下我的解决方案:
每次提示错误编码时,我都会将错误编码的内容收集进一个列表,然后在下次运行时
将这些错误编码替换成 空字符串,虽然我这种方法解决了出错的问题,但总觉得不完美。
要是能把错误编码解读出来就好了。
  1. list1 =['\xa9','\xbb','\u2122','\uc9d1','\u2022']
  2.     for n in list1:
  3.         req = req.replace(n,'')
  4.     return req
复制代码

上面是我剪下的一段,对了req = urllib.request.urlopen().read().decode()。你能理解吗,就是将遇到的错误码提前替代
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-14 19:21:34 | 显示全部楼层
JAY饭 发表于 2017-12-14 16:54
勉强看懂了
提供下我的解决方案:
每次提示错误编码时,我都会将错误编码的内容收集进一个列表,然后在下 ...


list1里面的字符串,是你在打开txt文件时碰到的?目前我运行时感觉都正常啊,没有发现类似错误编码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-14 20:59:55 | 显示全部楼层
payton24 发表于 2017-12-14 19:21
list1里面的字符串,是你在打开txt文件时碰到的?目前我运行时感觉都正常啊,没有发现类似错误编码。

喔,是我弄错了,我以为你程序报错呢,我的一直报错,utf -8 -sig等其他编码,在写入时都出现过解码错误。
但是我的所有内容都显示正常,可能是我替换了它们的字符串的关系吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 12:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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