我正在用这个来编码从谷歌搜索结果中刮取电子邮件。但是,尽管加载了100个搜索结果,它只刮取了前10个结果。
理想情况下,我希望它刮所有的搜索结果。
有什么原因吗?
from selenium import webdriver
import time
import re
import pandas as pd
PATH = 'C:\Program Files (x86)\chromedriver.exe'
l=list()
o={}
target_url = "https://www.google.com/search?q=solicitors+wales+%27email%27+%40&rlz=1C1CHBD_en-GBIT1013IT1013&sxsrf=AJOqlzWC1oRbVtWcmcIgC4-3ZnGkQ8sP_A%3A1675764565222&ei=VSPiY6WeDYyXrwStyaTwAQ&ved=0ahUKEwjlnIy9lYP9AhWMy4sKHa0kCR4Q4dUDCA8&uact=5&oq=solicitors+wales+%27email%27+%40&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIFCAAQogQyBwgAEB4QogQyBQgAEKIESgQIQRgASgQIRhgAUABYAGD4AmgAcAF4AIABc4gBc5IBAzAuMZgBAKABAcABAQ&sclient=gws-wiz-serp"
driver=webdriver.Chrome(PATH)
driver.get(target_url)
email_pattern = r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,4}"
html = driver.page_source
emails = re.findall(email_pattern, html)
time.sleep(10)
df = pd.DataFrame(emails, columns=['Email Addresses'])
df.to_excel('email_addresses_.xlsx',index=False)
# print(emails)
driver.close()
3条答案
按热度按时间jmp7cifd1#
这段代码运行正常,google搜索的默认结果是10个,你可以使用find_element_by_xpath等方法找到下一个按钮并点击它。
需要执行此操作,直到在循环中收集到足够的结果。有关更多详细信息,请参阅此操作selenium locating elements
如何使用selenium命令,也许你可以上网查一下,我找到了一个类似的question,可以提供一些参考
zbwhf8kr2#
根据Bijendra的回答,您可以更新代码如下:
您可以更改传入for循环的范围值,也可以用while循环完全替换for循环,从而将
您可以:
请务必管理时间,当页面导航到下一页,并等待下一页加载之前提取可用的电子邮件,然后移动到点击搜索结果页面上的下一个按钮。请务必参考文档,以获得一个清晰的想法,你应该做什么,以实现你想要的。快乐黑客!
yzckvree3#
Selenium会加载自己的空浏览器,所以你需要在代码中设置100个结果,因为默认值是10个结果,你会有更好的运气使用查询参数,并添加一个结果的数量到您的URL的末尾
如果您需要有关查询参数的更多信息来实现此目的,请使用下面介绍的第二种方法tldevtech.com/how-to-show-100-results-per-page-in-google-search