Python Web Scraper - 从 href 抓取链接的问题

时间:2021-03-03 03:06:33

标签: python python-3.x selenium web-scraping

我一直在关注 this guide 的网络抓取 LinkedIn 和谷歌搜索。自从创建指南以来,google 搜索结果的 HTML 发生了一些变化,所以我不得不稍微修改一下代码。我现在需要从搜索结果中获取链接,但遇到了一个问题,即使在执行 this post 的代码修复后由于错误,程序也没有返回任何内容。我不确定我在这里做错了什么。

import Parameters
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from parsel import Selector
import csv

# defining new variable passing two parameters
writer = csv.writer(open(Parameters.file_name, 'w'))

# writerow() method to the write to the file object
writer.writerow(['Name', 'Job Title', 'Company', 'College', 'Location', 'URL'])

# specifies the path to the chromedriver.exe
driver = webdriver.Chrome('/Users/.../Python Scripts/chromedriver')
driver.get('https://www.linkedin.com')
sleep(0.5)

# locate email form by_class_name then send_keys() to simulate key strokes
username = driver.find_element_by_id('session_key')
username.send_keys(Parameters.linkedin_username)
sleep(0.5)

password = driver.find_element_by_id('session_password')
password.send_keys(Parameters.linkedin_password)
sleep(0.5)

sign_in_button = driver.find_element_by_class_name('sign-in-form__submit-button')
sign_in_button.click()
sleep(3)

driver.get('https:www.google.com')
sleep(3)

search_query = driver.find_element_by_name('q')
search_query.send_keys(Parameters.search_query)
sleep(0.5)

search_query.send_keys(Keys.RETURN)
sleep(3)

################# HERE IS WHERE THE ISSUE LIES ######################
#linkedin_urls = driver.find_elements_by_class_name('iUh30')
linkedin_urls = driver.find_elements_by_css_selector("yuRUbf > a")
for url_prep in linkedin_urls:
    url_prep.get_attribute('href')
#linkedin_urls = [url.text for url in linkedin_urls]
sleep(0.5)

print('Supposed to be URLs')
print(linkedin_urls)

搜索参数是

search_query = 'site:linkedin.com/in/ AND "python developer" AND "London"'

结果为空列表: empty results list

我想抓取的 HTML 部分的片段: google search html

编辑:如果我通过 .find_elements_by_class_name 或 Sector97 的第一次编辑,这是输出。 Descriptive info but no URL

2 个答案:

答案 0 :(得分:1)

我想我在您的代码中发现了错误。 而不是使用

linkedin_urls = driver.find_elements_by_css_selector("yuRUbf > a")

试试这个:

web_elements = driver.find_elements_by_class_name("yuRUbf")

这会为您提供父元素。然后,您可以使用简单的列表理解来提取 url 文本:

linkedin_urls = [elem.find_element_by_css_selector('a').get_attribute('href') for elem in web_elements]

答案 1 :(得分:1)

找到了一种替代解决方案,可以让您更轻松地实现您所追求的目标。归功于 A.Pond 在 https://stackoverflow.com/a/62050505

使用谷歌搜索api从结果中获取链接。 您可能需要先安装库

pip install google

然后您可以使用 api 快速提取任意数量的链接:

from googlesearch import search

links = []
query = 'site:linkedin.com/in AND "python developer" AND "London"'
for j in search(query, tld = 'com',start = 0,stop = 100,pause=4): 
    links.append(j)

我得到了前 100 个结果,但您可以根据需要调整参数以获得更多或更少的结果。

您可以在此处查看有关此 API 的更多信息: https://www.geeksforgeeks.org/performing-google-search-using-python-code/

相关问题