Python+Selenium练习(一)-摘取网页上全部邮箱

练习场景:在某个网页上有一些字段是我们感兴趣的,我们希望摘取出来,进行其他操作。但是这些字段可能在网页的不同地方。例如,我们需要在关于百度页面上摘取全部邮箱。

 思路拆分:

1.首先,需要得到当前页面的source内容,例如,打开一个页面,右键-查看页面源代码。

2.找出规律,通过正则表达式去摘取匹配的字段,存储到一个字典或者列表。

3.循环打印字典或列表中内容,Python中用for语句实现。

技术角度实现相关方法:

1.查看页面的源代码,在Selenium中有drive.page_source 这个方法得到;

2.Python中利用正则,需要导读re模块;

3.for email in emails:

   print email

一、具体代码:

from selenium import webdriver
import re

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)

driver.get("http://home.baidu.com/contact.html")
# 得到页面源代码
doc = driver.page_source
emails = re.findall(r'[\w]+@[\w\.-]+',doc)
# 利用正则表达式,找出[email protected]
for email in emails:    # 循环打印匹配的邮箱
    print(email)

解释:

在python正则表达式语法中,Python中字符串前面加上r表示原生字符串,用\w表示匹配字母数字及下划线。re模块下findall方法返回的是一个匹配子字符串的列表。

运行结果:

二、进阶版

from selenium import webdriver
import re,time,pprint,xlwt

wb = xlwt.Workbook()
ws = wb.add_sheet('E-mails')

driver = webdriver.Chrome()
driver.maximize_window()
time.sleep(2)
driver.get('https://www.baidu.com/')
driver.find_element_by_xpath("//*[@class='lh']/a[text()='关于百度']").click()
print(driver.current_window_handle)
handles = driver.window_handles
for handle in handles:
    if handle != driver.current_window_handle:
        driver.close()
        print("马上切换到新页面", handle)
        driver.switch_to.window(handle)
driver.find_element_by_xpath("//*[@id='indexAdmin']/div[1]/div/div/div/div[2]/ul/li[4]/a").click()
# /html/body/div[1]/div/div/div/div[2]/ul/li[4]/a
print(driver.current_window_handle)
handles = driver.window_handles
print(handles)
for handle in handles:
    if handle!=driver.current_window_handle:
        driver.close() # 关闭第一个窗口
        print('马上切换到新标签页',handle)
        driver.switch_to.window(handle) # 切换到第二个窗口
# 得到页面源代码
doc = driver.page_source
emiles = re.findall(r'[\w]+@[\w\.-]+',doc)
for index,emile in enumerate(emiles):
    ws.write(index,0,emile)
    print(emile)
wb.save('百度联系邮箱.xls')
print('提取完成')
driver.close()

  

运行结果:

参考文章:https://blog.csdn.net/u011541946/article/details/68485981

猜你喜欢

转载自www.cnblogs.com/zhaocbbb/p/12609332.html
今日推荐