嗨我试图抓取谷歌搜索结果,只是为了我自己的学习,但也看到我可以加快访问直接URLS(我知道他们的API,但我只是想我现在试试这个)。
它工作正常,但它似乎停止了,它现在什么都没有返回,我不确定它是否我做了什么,但我可以说我在for循环中有这个允许start
参数增加,我想知道可能会导致问题。
谷歌有可能阻止IP抓取吗?
谢谢..
$url = "https://www.google.ie/search?q=adrian+de+cleir&start=1&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:official&client=firefox-a&channel=fflb&gws_rd=cr&ei=D730U7KgGfDT7AbNpoBY#channel=fflb&q=adrian+de+cleir&rls=org.mozilla:en-US:official";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);
# Create a DOM parser object
$dom = new DOMDocument();
# Parse the HTML from Google.
# The @ before the method call suppresses any warnings that
# loadHTML might throw because of invalid HTML in the page.
@$dom->loadHTML($html);
# Iterate over all the <a> tags
foreach($dom->getElementsByTagName('h3') as $link) {
$actual_link = $link->getElementsbyTagName('a');
foreach ($actual_link as $single_link) {
# Show the <a href>
echo '<pre>';
print_r($single_link->getAttribute('href'));
echo '</pre>';
}
}
答案 0 :(得分:1)
以下是我用python编写的程序。但它没有完全完成。现在它只获取第一页并打印结果上找到的所有href链接。
我们可以使用集合并从结果集中删除冗余链接。
import requests<br>
from bs4 import BeautifulSoup
def search_spider(max_pages, search_string):
page = 0
search_string = search_string.replace(' ','+')
while page <= max_pages:
url = 'https://www.google.com/search?num=10000&q=' + search_string + '#q=' + search_string + '&start=' + str(page)
print("URL to search - " + url)
source_code = requests.get(url)
count = 1
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
for link in soup.findAll("a", {"class" : ""}):
href = link.get('href')
input_string = slice_string(href)
print(input_string)
count += 1
page += 10
def slice_string(input_string):
input_string = input_string.lstrip("/url?q=")
index_c = input_string.find('&')
input_string = input_string[:index_c]
return input_string
search_spider(1,"bangalore cabs")
该程序将搜索谷歌中的班加罗尔出租车。
谢谢,
卡兰
答案 1 :(得分:0)
您可以通过以下简单的curl脚本命令检查Google是否阻止了您:
curl -sSLA Mozilla "http://www.google.com/search?q=linux" | html2text -width 80
您可以安装html2text
以将html转换为纯文本。
通常情况下,您应该使用Google提供的Custom Search API来避免任何限制,这样您就可以通过访问不同的格式(例如XML或JSON)来更轻松地检索搜索结果。