登录
首页 >  文章 >  python教程

百度百科爬虫HTTP重定向破解攻略

时间:2025-04-01 21:39:45 266浏览 收藏

本文针对使用lxml和xpath爬取百度百科信息时遇到的HTTP重定向问题,提供了解决方案。由于urllib.request.urlopen函数默认不处理重定向,导致爬取失败。文章通过代码示例演示了问题,并提出使用urllib.request.Request对象,结合异常处理,从而实现跟随重定向,最终成功获取百度百科页面内容,有效解决因重定向导致结果为空的难题。 关键词:百度百科爬虫,HTTP重定向,Python爬虫,urllib,lxml,xpath

百度百科网页爬取结果为空,如何解决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('\n') 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重定向破解攻略》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>