【问题标题】:Error while parsing google search result using urllib in python在 python 中使用 urllib 解析谷歌搜索结果时出错
【发布时间】:2020-09-11 23:29:12
【问题描述】:

于是我开始学习使用 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])

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

然后我尝试使用 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. 为什么第二个代码块给了我一个错误?这个错误是什么意思?

【问题讨论】:

  • 如果您要搜索具有 class="r a" 或 class="a r" 的元素,不妨试试 cssselect(".r.a")
  • 为什么第二个代码块出错了,这是什么意思?
  • 你为什么认为duckduckgo消息是错误的?该消息仅显示duckduckgo 检测到不理解javascript,并且duckduckgo 正在将您重定向到不同的页面。
  • 但它没有打印除此之外的任何内容
  • 您还期望第二个代码块打印出什么?

标签: python


【解决方案1】:

将您的 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())


【讨论】:

  • 因为没有匹配您的 CSS 选择器。 Google 会根据是否启用 javascript 显示不同的页面。 urllib 和 requests 都不做 javascript。
猜你喜欢
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2013-10-24
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多