百度百科网页爬取结果为空,如何解决HTTP重定向问题?(如何解决.为空.重定向.百科.网页...)

wufei1232025-03-08python6

百度百科网页爬取结果为空,如何解决http重定向问题?

百度百科网页爬取:解决HTTP重定向导致结果为空的问题

本文分析了使用lxml库和xpath表达式爬取百度百科信息时,因HTTP重定向导致结果为空的问题,并提供了解决方案。 代码中使用了urllib.request库,但该库的urlopen函数默认不处理重定向,导致爬取失败。

以下代码片段展示了问题所在:

import urllib.request
import urllib.parse
from lxml import etree

def query(content):
    url = 'https://baike.baidu.com/item/' + urllib.parse.quote(content)
    headers = {
        'user-agent': 'mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/67.0.3396.99 safari/537.36'
    }
    req = urllib.request.Request(url=url, headers=headers, method='GET') # 使用Request对象
    try:
        response = urllib.request.urlopen(req)
        text = response.read().decode('utf-8')
        html = etree.html(text)
        sen_list = html.xpath('//div[contains(@class,"lemma-summary") or contains(@class,"lemmawgt-lemmasummary")]//text()')
        sen_list_after_filter = [item.strip('
') for item in sen_list]
        return ''.join(sen_list_after_filter)
    except urllib.error.HTTPError as e:
        print(f"HTTP Error: {e.code} - {e.reason}")
        return None

if __name__ == '__main__':
    while True:
        content = input('查询词语:')
        result = query(content)
        if result:
            print("查询结果:%s" % result)
        else:
            print("查询失败")

如代码所示,当搜索“叶挺”时,由于百度百科链接重定向到/item/%e5%8f%b6%e6%8c%ba/299649,原始代码无法获取正确页面,导致结果为空。

解决方案:

为了解决这个问题,我们需要让代码能够跟随重定向。 虽然urllib.request.urlopen可以设置follow_redirects=True,但更稳妥的方法是使用urllib.request.Request对象,并结合异常处理:

import urllib.request
import urllib.parse
from lxml import etree

# ... (rest of the code remains the same)

改进后的代码增加了错误处理,能够捕获HTTP错误并返回None,避免程序崩溃。 使用Request对象可以更清晰地控制请求,并且更易于处理各种HTTP状态码。 通过这些改进,爬虫程序就能正确处理重定向,获取到百度百科页面的内容。

以上就是百度百科网页爬取结果为空,如何解决HTTP重定向问题?的详细内容,更多请关注知识资源分享宝库其它相关文章!

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。