首页 > 解决方案 > 在 python 中使用 urllib 解析谷歌搜索结果时出错

问题描述

所以我开始使用 urllib 和 bs4 在 python 中学习网页抓取,

我正在寻找要分析的代码,我发现了这个:- https://stackoverflow.com/a/38620894/14252018 这是代码:-

from urllib.parse import urlencode, urlparse, parse_qs

from lxml.html import fromstring
from requests import get

raw = get("https://www.google.com/search?q=StackOverflow").text
page = fromstring(raw)

for result in page.cssselect(".r a"):
    url = result.get("href")
    if url.startswith("/url?"):
        url = parse_qs(urlparse(url).query)['q']
    print(url[0])

当我尝试运行它时,它不会打印任何东西

我将其命名为 webparse.py

于是我尝试使用 bs4,这次我选择了https://www.duckduckgo.com

并将代码更改为:-

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen('https://duckduckgo.com/?q=dinosaur&t=h_&ia=web').read()
soup = bs.BeautifulSoup(sauce, 'lxml')

print(soup.get_text())

我收到一个错误:-

  1. 为什么第一个代码块没有运行?
  2. 为什么第二个代码块给了我一个错误?这个错误是什么意思?

标签: python

解决方案


将您的 duckduckgo URL 更改为该站点在未启用 javascript 时尝试将您重定向到的位置。

import bs4 as bs
import urllib.request

# url = 'https://duckduckgo.com/?q=dinosaur&t=h_&ia=web' # uses javascript
url = 'https://html.duckduckgo.com/html?q=dinosaur' # no javascript

sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce, 'lxml')

print(soup.get_text())



推荐阅读