Вы открываете страницы правильно. Похоже, что вы получаете дополнительные параметры запроса при получении href
для элементов a
.
Я изменил ваш код, чтобы получать только те ссылки, которые соответствуют этому шаблону регулярных выражений для ссылок 'https?:\/\/[a-zA-Z0-9\.\-\/]+'
, и принимать только 1 ссылка на веб-элемент (в вашем случае это иногда было 2).
# Put first 5 URLs of search into array x.
for link in soup.find_all("a", href=re.compile("(?<=/url\?q=)(htt.*://.*)")):
r = re.findall(pattern=re.compile('https?:\/\/[a-zA-Z0-9\.\-\/]+'), string=link['href'])[0]
urlList.append(r)
if len(urlList) == 5:
break
print(urlList[0])
driver.get(urlList[0])
pgsource = driver.page_source
print(pgsource)
Вы также можете просто использовать Selenium для той же цели, без Beautiful Soup, это будет выглядеть так:
from selenium import webdriver
search = '5 most popular dog breeds'
driver = webdriver.Chrome()
driver.get('https://www.google.co.in/#q=' + search)
# Using XPath to filter desired elements instead of regex:
links = driver.find_elements_by_xpath("//a[@href!='' and contains(@ping,'/url?sa')]")
urls = []
for link in links[1:6]:
urls += [link.get_attribute('href')]
print(urls[0])
driver.get(urls[0])
pgsource = driver.page_source
print(pgsource)
Это сработало для меня. Надеюсь, это поможет, удачи.