得到了一个基本的谷歌网页抓取器,返回第一个谷歌搜索页面的网址-我希望它包括进一步的网页网址。什么是最好的方式来分页,使它从网页2,3,4,5,6,7等网址。
不想去太空与多少页我 scrapy ,但肯定要比第一页!
import requests
import urllib
import pandas as pd
from requests_html import HTML
from requests_html import HTMLSession
def get_source(url):
try:
session = HTMLSession()
response = session.get(url)
return response
except requests.exceptions.RequestException as e:
print(e)
def scrape_google(query):
query = urllib.parse.quote_plus(query)
response = get_source("https://www.google.co.uk/search?q=" + query)
links = list(response.html.absolute_links)
google_domains = ('https://www.google.',
'https://google.',
'https://webcache.googleusercontent.',
'http://webcache.googleusercontent.',
'https://policies.google.',
'https://support.google.',
'https://maps.google.')
for url in links[:]:
if url.startswith(google_domains):
links.remove(url)
return links
print(scrape_google('https://www.google.com/search?q=letting agent'))
2条答案
按热度按时间mpgws1up1#
您可以迭代特定的
range()
,并通过将迭代次数乘以10来设置start参数-将结果保存到list
并使用set()
删除重复项:示例
输出
ffscu2ro2#
您可以使用
BeautifulSoup
网页抓取库抓取Google搜索结果,而无需使用requests-html
。为了动态地从所有可能的页面中提取所有结果,我们需要使用
while
循环,并在特定条件下退出循环。无论有多少页面,它都会遍历所有页面。基本上,我们不会硬编码页码来从N页到N页。在本例中,只要下一个按钮存在(由页面上是否存在按钮选择器决定,在我们的例子中是CSS选择器
.d6cvqb a[id=pnnext]
,您需要将["start"]的值增加10来访问下一个页面(非令牌分页),如果存在,否则,我们需要退出while循环:和其他网站一样,如果你使用
requests
,google可能会认为你是一个机器人而阻止你的请求,因为requests
中默认的用户代理库是python-requests
。为了避免这种情况,其中一个步骤可以是旋转
user-agent
,例如,在PC、移动设备和平板电脑之间切换,以及在Chrome、Firefox、Safari、Edge等浏览器之间切换。最可靠的方法是使用旋转代理、用户代理和验证码解算器。检查在线IDE中的代码。
输出示例:
作为替代,你可以使用SerpApi的Google Search Engine Results API,这是一个免费的付费API,不同的是它会绕过Google的屏蔽(包括CAPTCHA),不需要创建解析器和维护它。
代码示例:
输出: