如何一次抓取超过 100 google 个页面
How to scrape more than 100 google pages in one pass
我正在使用 python 中的请求库从 google 结果中获取 GET
数据。 https://www.google.com.pk/#q=pizza&num=10 will return first 10 results of google as I mentioned num=10
. Ultimately https://www.google.com.pk/#q=pizza&num=100 将 return 100 个结果 google 个结果。
但是
如果我写任何超过 100 的数字让 https://www.google.com.pk/#q=pizza&num=200 ,google 仍然是 return 前 100 个结果
怎么才能一次过100多?
代码:
import requests
url = 'http://www.google.com/search'
my_headers = { 'User-agent' : 'Mozilla/11.0' }
payload = { 'q' : pizza, 'start' : '0', 'num' : 200 }
r = requests.get( url, params = payload, headers = my_headers )
在 "r" 中,我只得到 URL 的 google 前 100 个结果,而不是 200
您可以使用 google 中更具编程性的 api 来获取结果,而不是尝试通过屏幕抓取人工搜索界面,没有错误检查或断言这符合所有 google 条款和条件,建议您查看使用此 url:
的详细信息
import requests
def search(query, pages=4, rsz=8):
url = 'https://ajax.googleapis.com/ajax/services/search/web'
params = {
'v': 1.0, # Version
'q': query, # Query string
'rsz': rsz, # Result set size - max 8
}
for s in range(0, pages*rsz+1, rsz):
params['start'] = s
r = requests.get(url, params=params)
for result in r.json()['responseData']['results']:
yield result
例如'google':
获得 200 个结果
>>> list(search('google', pages=24, rsz=8))
[{'GsearchResultClass': 'GwebSearch',
'cacheUrl': 'http://www.google.com/search?q=cache:y14FcUQOGl4J:www.google.com',
'content': 'Search the world's information, including webpages, images, videos and more. \n<b>Google</b> has many special features to help you find exactly what you're looking\xa0...',
'title': '<b>Google</b>',
'titleNoFormatting': 'Google',
'unescapedUrl': 'https://www.google.com/',
'url': 'https://www.google.com/',
'visibleUrl': 'www.google.com'},
...
]
要使用 Google 的自定义搜索 API,您需要注册为开发人员。您每天获得 100 个免费查询(我不确定那是 API 调用还是它允许对同一查询的分页计为 1 个查询):
- 报名@https://console.developers.google.com
- 创建项目
- 创建
key
- 启用自定义搜索API
- 创建自定义搜索引擎@https://cse.google.com
- 使用虚拟站点初始化 CSE
- 编辑自定义搜索引擎以搜索整个网络
- 删除虚拟站点
- 获取 CSE 参考(查看 public URL for
cx=<cse reference>
)
您可以使用 requests
进行查询:
import requests
url = 'https://www.googleapis.com/customsearch/v1'
params = {
'key': '<key>',
'cx': '<cse reference>',
'q': '<search>',
'num': 10,
'start': 1
}
resp = requests.get(url, params=params)
results = resp.json()['items']
使用 start
您可以进行与上述类似的分页。
还有许多其他可用参数,您可以查看 CSE 的 REST 文档:https://developers.google.com/custom-search/json-api/v1/reference/cse/list#request
Google 也有一个 client-api 库:pip install google-api-python-client
你也可以使用:
from googleapiclient import discovery
service = discovery.build('customsearch', 'v1', developerKey='<key>')
params = {
'q': '<query>',
'cx': '<cse reference>',
'num': 10,
'start': 1
}
query = service.cse().list(**params)
results = query.execute()['items']
您可以为此目的使用浏览器自动化。我用它来抓取图像列表。使用浏览器自动化,您可以单击下一个或上一个按钮并取消结果。我无法粘贴代码。
我正在使用 python 中的请求库从 google 结果中获取 GET
数据。 https://www.google.com.pk/#q=pizza&num=10 will return first 10 results of google as I mentioned num=10
. Ultimately https://www.google.com.pk/#q=pizza&num=100 将 return 100 个结果 google 个结果。
但是
如果我写任何超过 100 的数字让 https://www.google.com.pk/#q=pizza&num=200 ,google 仍然是 return 前 100 个结果
怎么才能一次过100多?
代码:
import requests
url = 'http://www.google.com/search'
my_headers = { 'User-agent' : 'Mozilla/11.0' }
payload = { 'q' : pizza, 'start' : '0', 'num' : 200 }
r = requests.get( url, params = payload, headers = my_headers )
在 "r" 中,我只得到 URL 的 google 前 100 个结果,而不是 200
您可以使用 google 中更具编程性的 api 来获取结果,而不是尝试通过屏幕抓取人工搜索界面,没有错误检查或断言这符合所有 google 条款和条件,建议您查看使用此 url:
的详细信息import requests
def search(query, pages=4, rsz=8):
url = 'https://ajax.googleapis.com/ajax/services/search/web'
params = {
'v': 1.0, # Version
'q': query, # Query string
'rsz': rsz, # Result set size - max 8
}
for s in range(0, pages*rsz+1, rsz):
params['start'] = s
r = requests.get(url, params=params)
for result in r.json()['responseData']['results']:
yield result
例如'google':
获得 200 个结果>>> list(search('google', pages=24, rsz=8))
[{'GsearchResultClass': 'GwebSearch',
'cacheUrl': 'http://www.google.com/search?q=cache:y14FcUQOGl4J:www.google.com',
'content': 'Search the world's information, including webpages, images, videos and more. \n<b>Google</b> has many special features to help you find exactly what you're looking\xa0...',
'title': '<b>Google</b>',
'titleNoFormatting': 'Google',
'unescapedUrl': 'https://www.google.com/',
'url': 'https://www.google.com/',
'visibleUrl': 'www.google.com'},
...
]
要使用 Google 的自定义搜索 API,您需要注册为开发人员。您每天获得 100 个免费查询(我不确定那是 API 调用还是它允许对同一查询的分页计为 1 个查询):
- 报名@https://console.developers.google.com
- 创建项目
- 创建
key
- 启用自定义搜索API
- 创建自定义搜索引擎@https://cse.google.com
- 使用虚拟站点初始化 CSE
- 编辑自定义搜索引擎以搜索整个网络
- 删除虚拟站点
- 获取 CSE 参考(查看 public URL for
cx=<cse reference>
)
您可以使用 requests
进行查询:
import requests
url = 'https://www.googleapis.com/customsearch/v1'
params = {
'key': '<key>',
'cx': '<cse reference>',
'q': '<search>',
'num': 10,
'start': 1
}
resp = requests.get(url, params=params)
results = resp.json()['items']
使用 start
您可以进行与上述类似的分页。
还有许多其他可用参数,您可以查看 CSE 的 REST 文档:https://developers.google.com/custom-search/json-api/v1/reference/cse/list#request
Google 也有一个 client-api 库:pip install google-api-python-client
你也可以使用:
from googleapiclient import discovery
service = discovery.build('customsearch', 'v1', developerKey='<key>')
params = {
'q': '<query>',
'cx': '<cse reference>',
'num': 10,
'start': 1
}
query = service.cse().list(**params)
results = query.execute()['items']
您可以为此目的使用浏览器自动化。我用它来抓取图像列表。使用浏览器自动化,您可以单击下一个或上一个按钮并取消结果。我无法粘贴代码。