ValueError:使用 urllib.request 抓取 Google 搜索结果时出现未知的 url 类型

问题描述 投票:0回答:1

我是 Python 新手,正在开发一个网络抓取项目来学习。我正在尝试从 Google 搜索结果中提取今天的温度。我已经将不同来源的代码拼凑在一起,但遇到了 ValueError:未知的 url 类型错误。 这是我的代码:

    from bs4 import BeautifulSoup as soup
import requests
from urllib.request import urlopen, Request

myurl = "https://www.google.com/search?q=temperature+today"
req = Request(
    myurl,
    data=None,
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }
)
f = Request(req)  # This line seems to be causing the error
print(f.read().decode('utf-8'))

错误信息是: ValueError:未知的 url 类型:'urllib.request.Request 对象位于 0x004BF610'

我相信该错误与我使用 urllib.request.Request 的方式有关。我最初认为它可以与 urllib.request.urlopen 互换,但事实似乎并非如此。当我打印 req 对象时,我得到 。 有人可以解释为什么我当前的方法不正确并指导我如何解决它吗?我想了解该错误以及如何正确使用 urllib.request 发出请求和读取响应。 我的问题与其他 Stack Overflow 帖子([https://stackoverflow.com/questions/56362584/valueerrorunknown-url-type-r-self-full-url])不同,因为它关注 urllib.request 的不同方面.

python debugging web-scraping
1个回答
1
投票

您正在使用先前的 Request 对象作为参数创建一个新的 Request 对象。相反,您想使用 Request 对象调用

urlopen()
。像这样:

import requests
from urllib.request import urlopen, Request

myurl="https://www.google.com/search?q=temperature+today"
req = Request(
myurl,
    data=None,
      headers={
          'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) >AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'    
          })
f = urlopen(req)
print(f.read().decode('utf-8'))
© www.soinside.com 2019 - 2024. All rights reserved.