Python web刮刮希腊字母未显示

时间:2018-05-01 09:46:41

标签: web-scraping python-3.5

我正在尝试学习如何使用python3自动执行任务。现在,我正在尝试打开一个网站,从中获取一个元素,然后使用requests,docx和bs4模块将其文本作为新段落添加到单词表中。所有这一切都很好,但该网站包含一些希腊字母。当我尝试打开单词表时,数字等都很好,但希腊字母显示错误(它们都显示为Öéëïá等)。我怎么解决这个问题?? 这是我的代码:

import requests, docx, bs4
doc = docx.Document()
res=requests.get(“http://www.betcosmos.com/index.php?page=kouponi_stoixima”)
soup =bs4.BeautifulSoup(res.text, “lxml”)
elem =soup.select(“.kouponi_table”)
doc.add_paragraph(elem[0].getText())
doc.save(“BetMasterData.docx”)

提前感谢您的时间

1 个答案:

答案 0 :(得分:1)

阅读我们遇到的关于响应内容的请求文档。 Requests 2.18.4 Documentation - Response Content

响应内容

  

我们可以阅读服务器响应的内容。再次考虑GitHub时间表:

     
    
      

导入请求

             

r = requests.get('https://api.github.com/events')

             

r.text       U'[{ “库”:{ “open_issues”:0, “URL”:“https://github.com/ ...

    
  
     

请求将自动解码服务器中的内容。大多数unicode字符集都是无缝解码的。

     

当您发出请求时,Requests会根据HTTP标头对响应的编码进行有根据的猜测。当您访问r.text时,将使用由Requests猜测的文本编码。您可以使用r.encoding属性找出请求使用的编码,并进行更改:

     
    
      

r.encoding       'UTF-8'       r.encoding ='ISO-8859-1'

    
  
     

如果更改编码,只要调用r.text,Requests就会使用r.encoding的新值。您可能希望在任何可以应用特殊逻辑来计算内容编码的情况下执行此操作。例如,HTML和XML可以在其正文中指定其编码。在这种情况下,您应该使用r.content查找编码,然后设置r.encoding。这将允许您使用正确编码的r.text。

     

请求还将在您需要时使用自定义编码。如果您已经创建了自己的编码并使用编解码器模块进行了注册,则只需使用编解码器名称作为r.encoding的值,并且Requests将为您处理解码。

二进制响应内容

  

对于非文本请求,您还可以以字节形式访问响应正文:

     
    
      

r.content       B'[{ “库”:{ “open_issues”:0, “URL”:“https://github.com/ ...

    
  
     

gzip和deflate传输编码会自动为您解码。

请改为尝试:

import requests, docx, bs4

doc = docx.Document()
res = requests.get('http://www.betcosmos.com/index.php?page=kouponi_stoixima')
soup = bs4.BeautifulSoup(res.content, 'lxml')
elem = soup.select('.kouponi_table') 
doc.add_paragraph(elem[0].getText())
doc.save('BetMasterData.docx')`