鱼C论坛

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

爬虫编码问题

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

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

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

x
本帖最后由 玄夜Python之路 于 2017-3-17 16:59 编辑

解析到615,634,697,1062,1076,1305,1335,1346,1355章节时编码错误,百度说是Python爬取gzip压缩网页问题,可根据这个网页(Python爬取网页Utf-8解码错误及gzip压缩问题的解决办法 - 知乎专栏
https://zhuanlan.zhihu.com/p/25095566?refer=zjying2000)提高的信息并没有得到解决,不知道还有谁曾遇到过此问题!!!望大神解惑一下。
我仔细分析了一下这些网页其头文件中都是Accept-Encoding:gzip, deflate,如图:Accept-Encoding(此图暂时上传不了)我将headers复制粘贴吧:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:www.23us.com
Pragma:no-cache
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 BIDUBrowser/7.6 Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:86C74E7B-700F-405A-96FD-DC2B68C49A9D
1489125733(1).png (166.1 KB, 下载次数: 0)



源码:
#!usr/bin/env python3
# -*- coding=utf-8 -*-
# 2017.3.8 斗破苍穹  顶点小说 url:http://www.23us.com/html/0/298/
#                                                             http://www.23us.com/html/0/298/1962332.html
import requests
from bs4 import BeautifulSoup
import time

home_url = 'http://www.23us.com/html/0/298/'        #主页
def get(home_url):        # 网页分析
        header = {'Accept-Encoding':'','User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 BIDUBrowser/7.6 Safari/537.36'}
        html = requests.get(home_url,headers=header).text.encode('ISO-8859-1')
        soup = BeautifulSoup(html,'html.parser')
        return soup
def zhangjie(home_url):  # 章节获取
        soup = get(home_url )
        novel = ''.join([novel.text for novel in soup.select('h1')])[:4]        #小说名称
        print('正在下载的小说是:%s' %novel)
        # urllib.request.urlretrieve(novel,'D:\\Python之窗\\Spider\\xiaoshuo\\%s' % novel)
        url = [i.get('href') for i in soup.select('td.L a')[:-2]]         #章节链接url
        name = [i.text for i in soup.select('td.L a')[:-2]]                         #章节名称name
        print('%s共计%d章' % (novel,len(name)))
        print('现在开始获取%s的内容' % novel,'\n\n\n')
        return url
def content(home_url):        #内容获取
        id = 0
        for href in zhangjie(home_url):
                url = home_url + href        #章节链接url
                soup = get(url)
                id += 1
                title = [title.text for title in soup.select('h1')]                #标题list
                title = ''.join(title)[3:]
                print(title)
                # contents = soup.select('dd#contents')
                contents = [content.text for content in soup.select('dd#contents')]                #章节内容list
                contents = ''.join(contents).replace('\xa0\xa0\xa0\xa0','')                #去掉空格
                print('%s的内容已获取完毕!' % title)
                path = 'D:\\Python之窗\\Spider\\xiaoshuo\\斗破苍穹\\'
                try:
                        with open(path+title+'.txt','wt',encoding='utf-8') as f:
                                f.write('\t'+title+'\n'+contents)
                                print('%s的内容已下载完毕!' % title)
                                f.close()
                except UnicodeEncodeError:
                        print('%s编码错误' % title)
                        time.sleep(2)
                except UnicodeDecodeError:
                        print('%s编码错误' % title)
                except OSError:
                        print('%s不知道啥意思'%title)
                        time.sleep(2)

content(home_url)
140649ropzlme3kmpmmkye.png
115819v1lfj2ofv8l72nrn.png
115826inxzddr6ut5j7xjj.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-17 16:00:33 | 显示全部楼层
把源程序贴上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-17 17:00:34 | 显示全部楼层

源码已附
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-17 23:56:06 | 显示全部楼层
先说会 你这发的是代码???
我把这些程序粘贴到pycharm上改格式都改了半天,另外我用的python2,有些不兼容,又花时间改了些
基本改完了,也不报错了,只是下载的都是乱码,明天再看吧。。。
#!usr/bin/env python2
# -*- coding=utf-8 -*-
# 2017.3.8 斗破苍穹  顶点小说 url:http://www.23us.com/html/0/298/
#                                                             http://www.23us.com/html/0/298/1962332.html
import requests
from bs4 import BeautifulSoup
import time

home_url = 'http://www.23us.com/html/0/298/'   #主页
def get(home_url):# 网页分析
    header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393'}
    html = requests.get(home_url,headers=header).text.encode('utf-8')
    soup = BeautifulSoup(html,'html.parser')
    return soup
def zhangjie(home_url):# 章节获取
    soup = get(home_url )
    novel = ''.join([novel.text for novel in soup.select('h1')])[:4]#小说名称
#    print('正在下载的小说是:%s' %novel)
    # urllib.request.urlretrieve(novel,'D:\\Python之窗\\Spider\\xiaoshuo\\%s' % novel)
    url = [i.get('href') for i in soup.select('td.L a')[:-2]]#章节链接url
    name = [i.text for i in soup.select('td.L a')[:-2]]#章节名称name
    #print'%s共计%d章' % (novel,len(name)))
    #print('现在开始获取%s的内容' % novel,'\n\n\n')
    return url
def content(home_url):#内容获取
    id = 0
    for href in zhangjie(home_url):
        url = home_url + href#章节链接url
        soup = get(url)
        id += 1
        title = [title.text for title in soup.select('h1')]#标题list
        title = ''.join(title)[3:]
        #print(title)
        # contents = soup.select('dd#contents')
        contents = [content.text for content in soup.select('dd#contents')]#章节内容list
        contents = ''.join(contents)
        #print('%s的内容已获取完毕!' % title)
        path = 'D:\\Python2\\Spider\\xiaoshuo\\'
        try:
            with open(path+title+'.txt','wt') as f:
                f.write('\t'+title+'\n'+contents)
                #print('%s的内容已下载完毕!' % title)
                f.close()
        except UnicodeEncodeError:
            #print('%s编码错误' % title)
            time.sleep(2)
        except UnicodeDecodeError,e:
            print e
            #print('%s编码错误' % title)
        except OSError,e:
            print e
            time.sleep(2)
content(home_url)
这才是发代码的正确格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-21 15:30:58 | 显示全部楼层
文明的读书人 发表于 2017-3-17 23:56
先说会 你这发的是代码???
我把这些程序粘贴到pycharm上改格式都改了半天,另外我用的python2,有些不 ...

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 15:57:28 | 显示全部楼层

其实不是所有的网页都是用的“utf-8”
你的这个地方html = requests.get(home_url,headers=header).text.encode('utf-8')可以先看看网页的编码是什么,说不定别人是“gbk”呢?你把这里改成“gbk”试试吧
完整代码我没看,只是说说我的想法,试试看又不怀孕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 04:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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