本文主要使用工具为selenium,并以Chrome浏览器为例。
selenium是为web自动化测试开发的,可以模拟任何网页操作,学会了,不仅可以爬取信息,还可以重复做各种无脑网页操作。
selenium适合爬取动态网页,所见即所得,虽然慢了些。有人不喜欢,但个人觉得挺方便的,因为不用学习复杂的各种网页解析技能。但有些反爬网站,针对selenium的,那就得换工具了。
但对于致力于学习爬虫的小伙伴,不建议学这个。老老实实学爬虫该学的各种技术,能够进行大规模甚至并行乃至分布式爬取。
静态网页的话,爬取较为简单。教程很多。
一、安装selenium以及Chrome
教程链接
注意:
使用不同的浏览器,需要配置不同的浏览器驱动。
二、XPath技术和正则表达式技术
需要学习XPath技术和正则表达式技术,xpath能够让程序快速定位,正则表达式打辅助,用来进一步提取需要的信息。
三、获取网页某个位置的xpath
Ctrl + shift + c 打开网页源代码,用鼠标左键选择网页中你想定位的地方,源代码对应位置会高亮。鼠标右键点击高亮的代码,复制xpath
注意:
直接复制的xpath pattern虽然能用,但比较死板不够灵活,网页的结构发生微小的变动,就无法定位了。需要自己进一步根据网页源代码改写xpath路径。找出源码中不变的xpath pattern用来定位。
四、一个简单的示例
from selenium import webdriver
import pandas as pd
import numpy as np
query_list = ['deep learning'
]
result_list = []
failed = []
driver = webdriver.Chrome()
for query_text in query_list:
try:
driver.get('https://www.google.com')
driver.implicitly_wait(1)
# 定位搜索框,并输入查询词
driver.find_element_by_xpath('/html/body/div[1]/div[3]/form/div[2]/div[1]/div[1]/div/div[2]/input').send_keys('%s\n' % query_text)
# 这里的xpath就是右键复制过来的
except:
result_list.append(np.nan)
continue
try:
res = driver.find_element_by_xpath('//*[@id="wp-tabs-container"]/div[1]/div[3]/div/div/div/div[2]/h2/span').text
# 这里的xpath就是右键复制过来的
result_list.append(res)
except:
result_list.append(np.nan)
res = pd.DataFrame({'drug_name': query_list,
'result':result_list
})
print(res)