我正在尝试使用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=",""))'''
答案 0 :(得分:0)
.text
方法,因为在这种情况下,下方没有不需要的文本。这样,它将返回所有“引用”链接。代码和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 工作。