我一直在关注 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"'
编辑:如果我通过 .find_elements_by_class_name
或 Sector97 的第一次编辑,这是输出。
答案 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/