検索

ホームページ  >  に質問  >  本文

python - 爬取人民日报的评论员文章,碰到问题了,求解答。

新手,在学习python爬虫,环境是python3.4,想爬取人民日报评论员文章,现在只怕去了一个网页,代码如下,

import requests
from bs4 import BeautifulSoup
import re

myUrl = "http://cpc.people.com.cn/pinglun/n1/201/0613/c78779-28428425.html"
response = requests.get(myUrl)
soup = BeautifulSoup(response.text, "lxml", from_encoding="gbk")
print(soup.title.string.encode('ISO-8859-1').decode('gbk'))

for a in soup.find_all(style="text-indent: 2em;"):
    print(a.string.encode('ISO-8859-1').decode('gbk'))

网页上出错的源代码如下:
<span style="text-indent: 2em; display: block;" id="paper_num">《 人民日报 》( 2016年06月13日 01 版)</span>
我的出错提示如下:
Traceback (most recent call last):
File "pa_chong_lx.py", line 21, in <module>

print(a.string.encode('ISO-8859-1').decode('gbk'))

AttributeError: 'NoneType' object has no attribute 'encode'
原因分析:
我查找的关键词是style="text-indent: 2em;,这段代码<span style="text-indent: 2em; display: block;" id="paper_num">《 人民日报 》( 2016年06月13日 01 版)</span> 格式与前边的主题文章代码不一样,所以出错,求解答怎么改。

新手,因为编码的问题卡了好久,感觉一步一个坑,步步是坑!python虽然简单,但也正是简单,我不知道哪里出错了,或者是知道错误但不知道怎么改正。

PHPzPHPz2890日前677

全員に返信(3)返信します

  • 天蓬老师

    天蓬老师2017-04-17 18:00:53

    元のコードのリンクは無効になっています。例として http://cpc.people.com.cn/n1/2016/0628/c404684-28502214.html の記事を使用しました。

    作業コード:

    リーリー

    実行結果:

    ここで発生するエンコードの問題は非常に一般的です。簡単に言えば、リクエストが Web ページのエンコード方式を誤って推測したことです。

    リクエストが応答を取得した後、取得されたデータはヘッダーで指定されたエンコーディングに従ってデコードされます。応答ヘッダーでエンコーディングが指定されていない場合、デフォルトは ISO-8859-1 (エンコーディング属性) です。幸いなことに、リクエストはコンテンツに基づいてエンコード スキームを推測することもでき、推測された結果は、People's Daily のコメントの場合は GB2312 に保存されます。したがって、encoding =parent_encoding を指定するだけでテキストを取得し、正しいデコード結果を得ることができます。 (apparent_encoding が 100% 正しいとは保証されないことに注意してください)

    リクエスト ドキュメント パーツは、応答コンテンツを参照できます。
    エンコーディングの理解については、「ヒューマン コンピューター インタラクションのための文字エンコーディング」および「5 分でわかる Python 文字エンコーディングの打破」を参照してください。
    リクエストのエンコード分析の詳細については、「Python + リクエストのエンコードの問題」を参照してください

    コーディングには確かに落とし穴がありますが、一度理解すれば、それを避けるのは簡単です。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 18:00:53

    共通の要素を見つけて、正規表現を使用してデータをフィルタリングします

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:00:53

    エラーの理由は、NoneType クラスに encode 属性がないことです。これは、soup.find_all() を使用して括弧内のパラメーターと一致しないことを意味します。まずタグを一致させてから、スタイルを一致させてください。うまくいかない場合は、正規表現

    を使用してください。

    返事
    0
  • キャンセル返事