使用BeautifulSoup

时间:2017-08-24 21:57:42

标签: python beautifulsoup python-requests bs4

我正在尝试使用Requests和Beautiful Soup网页抓取库来抓取Google的网址。

for URL in soup.find_all('cite'):
    print(URL.text)

我以前尝试通过搜索链接然后获取链接的href来获取网址,但此方法的问题似乎是这些网址由Google缓存,并且在尝试访问网址时链接经常被打破。

我注意到Google使用引号标记来保存网址。虽然这适用于绝大多数URL,但有时页面上的其他文本也位于引用标记内。

大多数标签都有一个类=" _Rm"或类=" Rm bc"。我怎么能告诉Beautiful Soup用一类子串来搜索标签" Rm"?

我知道可能有更好的方法来完成所有这些。有人知道我怎么做这个/另一种方法会返回网站的实际网址吗?

这是我之前用来获取网址的代码

for URL in soup.find_all("a",href=re.compile("(?<=/url\?q=)(htt.*://.*)")):

    print ("\n" + URL.text + "\n")

    print re.split(":(?=http)",URL["href"].replace("/url?q=",""))'''

1 个答案:

答案 0 :(得分:0)

  1. 您可以转到父容器并使用 .text 方法,因为在这种情况下,下方没有不需要的文本。这样,它将返回所有“引用”链接。
  2. 使用第三方 API SerpApi(见下文)

代码和full example

from bs4 import BeautifulSoup
import requests
import lxml

headers = {
    'User-agent':
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}

html = requests.get('https://www.google.com/search?q=java',
                    headers=headers).text

soup = BeautifulSoup(html, 'lxml')

for container in soup.findAll('div', class_='TbwUpd NJjxre'):
  link = container.text
  print(link)

输出:

https://www.java.com
https://www.oracle.com › java › technologies
https://www.oracle.com › java › technologies › javase-d...
https://en.wikipedia.org › wiki › Java_(programming_l...
https://en.wikipedia.org › wiki › Java
https://www.supremecourt.gov › opinions
https://openjdk.java.net

或者,您可以使用来自 SerpApi 的 Google Search Engine Results API。这是一个免费试用的付费 API。

import os
from serpapi import GoogleSearch

params = {
    "engine": "google",
    "q": "java",
    "api_key": os.getenv("API_KEY"),
}

search = GoogleSearch(params)
results = search.get_dict()

for result in results["organic_results"]:
   print(f"Link: {result['displayed_link']}")

输出:

Link: https://www.java.com
Link: https://www.oracle.com › java › technologies
Link: https://www.oracle.com › java › technologies › javase-d...
Link: https://en.wikipedia.org › wiki › Java_(programming_l...
Link: https://en.wikipedia.org › wiki › Java
Link: https://www.supremecourt.gov › opinions
Link: https://openjdk.java.net
<块引用>

免责声明,我为 SerpApi 工作。