【问题标题】:Why getting only empty ResultSet for href from google search result?为什么只从谷歌搜索结果中获取 href 的空结果集?
【发布时间】:2023-01-21 21:20:16
【问题描述】:

我一直致力于 Google Colab 开发一个脚本来抓取谷歌搜索结果。它已经工作了很长时间没有任何问题,但现在没有。似乎代码页源不同,我现在使用的 CSS 类也不同。 我使用 Selenium 和 BeautifulSoup,代码如下:

# Installing Selenium after new Ubuntu update
%%shell
cat > /etc/apt/sources.list.d/debian.list <<'EOF'
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main
deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main
EOF

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A

apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg
apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg
apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg

cat > /etc/apt/preferences.d/chromium.pref << 'EOF'
Package: *
Pin: release a=eoan
Pin-Priority: 500


Package: *
Pin: origin "deb.debian.org"
Pin-Priority: 300


Package: chromium*
Pin: origin "deb.debian.org"
Pin-Priority: 700
EOF

apt-get update
apt-get install chromium chromium-driver

pip install selenium

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup 


# Parameters to use Selenium and Chromedriver
ua = UserAgent()
userAgent = ua.random
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent="'+userAgent+'"')

#options.headless = True

driver = webdriver.Chrome('chromedriver',options=options)

# Trying to scrape Google Search Results
links = [] 
url = "https://www.google.es/search?q=alergia

driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')

#This doesn't return anything
search = soup.find_all('div', class_='yuRUbf')
for h in search:
  links.append(h.a.get('href'))
print(links)

为什么现在 yuRUbf 类不适用于抓取搜索结果?一直为我工作

尝试使用SeleniumBeautifulSoup从谷歌搜索结果中抓取href链接

【问题讨论】:

    标签: selenium web-scraping beautifulsoup google-colaboratory google-search


    【解决方案1】:

    可能会有不同的问题,只要你的问题在这一点上不是那么具体——所以总是首先,看看你的soup,看看是否所有预期的成分都到位了。

    • 检查您是否遇到同意横幅重定向,并通过单击或发送相应的标头使用 selenium 处理它。

    • 类是高度动态的东西,所以改变选择策略并使用更多静态内容,如 id 或 HTML 结构 - 这里使用 css selctors

      soup.select('a:has(h3)')
      

    例子:

    因为这里并不真正需要 selenium 这是带有 requests 的精简版:

    import requests
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(requests.get('https://www.google.es/search?q=alergia',headers = {'User-Agent': 'Mozilla/5.0'}, cookies={'CONSENT':'YES+'}).text)
    [a.get('href').strip('/url?q=') for a in soup.select('a:has(h3)')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2014-08-25
      • 2011-05-21
      相关资源
      最近更新 更多