设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 10939|回复: 3
打印 上一主题 下一主题

print输出时候的一些奇怪现象.

[复制链接]

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2016-6-19 18:26:17 |显示全部楼层 |倒序浏览
本帖最后由 anyone 于 2016-6-19 18:28 编辑

我编了个练习代码, 用来取http://www.xiaohuayoumo.com网站的右下角的"今日热点"

  1. import requests
  2. from lxml import html

  3. url='http://www.xiaohuayoumo.com/'
  4. dict_headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36'}


  5. # get list_links

  6. page=requests.get(url, headers=dict_headers)
  7. tree=html.fromstring(page.content)
  8. list_links=tree.xpath("//div[@class='front-top-box front-top-box-2 front-top-box-right']//a/@href")


  9. # get content for each list_links

  10. for i in list_links:
  11.     i='http://www.xiaohuayoumo.com'+i
  12.     page=requests.get(i, headers=dict_headers)
  13.     tree=html.fromstring(page.content)
  14.     title=''.join(tree.xpath("//h1[@class='page-title']/text()")).strip()
  15.     content=''.join(tree.xpath("//div[@property='content:encoded']//text()[normalize-space(.)]"))

  16.     # # 1st not show all of the articals in sublime <<<<<<<<<<<<<<<<<<<<<<<<<<
  17.     # print '\n\n'+title.encode('utf-8')
  18.     # print i
  19.     # print content.encode('utf-8')


  20.     # # 2nd coding error in window output <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  21.     # print '\n\n'+title.encode('cp936')
  22.     # print i
  23.     # print content.encode('cp936')
复制代码
注释的两个地方分别是两种方法输出,

第一是直接在sublime的输出中输出, 但是他会忽略一些输出, 本来一共是10则, 但只得到4则. 在查看丢失的文章的标题, 是由len()数目的, 但是就是无法上屏. 也没有任何错误提示.

第二是我尝试用windows terminal屏幕输出, 但是会碰到一个如下的错误提示, 我以前从来么有遇到过:
  1. UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 691:
  2. illegal multibyte sequence
复制代码
请问crossin, 这两个情况是什么原因? 该如何解决呢?
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

沙发
发表于 2016-6-19 22:31:29 |显示全部楼层
补充一下, 我最后不使用屏幕输出, 而用文件写入:
  1. with open ('desktop\testing.txt', 'a') as f:
  2.     f.write '\n\n'+title.encode('utf-8')
  3.     f.write i
  4.     f.write content.encode('utf-8')
复制代码
这个生成的texting.txt文件就没有问题. 不知何解?
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

板凳
发表于 2016-6-20 16:02:50 |显示全部楼层
crossin先生 发表于 2016-6-20 14:02
输出会少我不知道,你把中间数据输出然后调试看内容到底有什么问题,是不是第二次没有请求到内容 ...

我想是取到了, 因为:

1, 我用len()测试每次递归反馈的标题长度, 那些没有显示出来的标题是有len()长度的.
2, 我换用write(), 将取到的数据写到文本中, 就是完整的.

所以我想可能是你提到的decode的问题. 我从这方面入手试试.

如果可以的话, 请问如何使用requests自定义decode的编码呢? 是在get的时候定义, 还是定义get().content呢?
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

地板
发表于 2016-7-2 23:41:20 |显示全部楼层
crossin先生 发表于 2016-6-21 11:27
这个应该和request无关,应该你取出content之后,对content的编码做处理时候的问题 ...

根据我自己的排查, 这个估计是sublime的bag.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-20 08:43 , Processed in 0.017226 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部