python+selenium+xpath实用,避坑,爬虫篇
selenium
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器。结合谷歌驱动,实现爬取数据。 谷歌驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/ 在谷歌浏览器上输入chrome://version/,可以看到自己谷歌对应的版本,并下载对应的谷歌驱动
对应版本的84.0.4147对应上即可,后面的只是这个版本修复的次数。
设置谷歌驱动参数
option = webdriver.ChromeOptions() option.add_argument("--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data") option.add_argument(--user-agent= + ur.process_request()) option.add_experimental_option(excludeSwitches, [enable-automation]) option.add_experimental_option(useAutomationExtension, False) self.browser = webdriver.Chrome(options=option,executable_path=rD:scrapychromedriver.exe) self.browser.maximize_window() self.browser.implicitly_wait(6)
这里的executable_path填写的是selenium需要的谷歌驱动exe的绝对路径 推荐将利用自己本地的谷歌去驱动,这样或多或少解决一些反爬虫机制问题 option.add_argument("–user-data-dir=C:UsersAdministratorAppDataLocalGoogleChromeUser Data"),这里是使用本地的谷歌位置,本地谷歌位置可以通过输入chrome://version/查看。 只需写到个人资料路径的到UserData。不过在使用的时候,需要先关掉所有的谷歌浏览器打开的页面。 这里推荐使用如下代码,并抛异常,在每次要进入页面的时候。
try: os.system(taskkill /im chromedriver.exe /F) os.system(taskkill /im chrome.exe /F) except: pass
实用xpath使用攻略
xpath定位,利用创建好的谷歌驱动browser来利用xpath定位获取值或者触发点击: self.browser.find_element_by_xpath(‘xpath路径’).click() self.browser.find_element_by_xpath(‘xpath路径’).text 获取图片地址,src link = self.browser.find_element_by_xpath(‘图片定位的xpath’).get_attribute(‘src’) self.browser.get(link) 获取需要点击的href链接 res = [ ] for link in self.browser.find_elements_by_xpath(‘寻找到一群链接的上一个标签的xpath’’): a = link.get_attribute(‘href’) res.append(a)
其他定位实用
self.browser.find_element_by_id(‘页面唯一的id’).text self.browser.find_element_by_class_name(‘要爬取或者点击的类名’).click()
找到相应的位置,右键,copy里面有xpath:/html/body/div[1]/h1/a,可以获得xpath路径,其他的类似。
设置代理
自测可以使用本地的代理
class my_useragent(object): # 设置用户代理 防反爬虫,每爬一条数据 切换一次代理 def process_request(self): # user_agent 列表 USER_AGENT_LIST = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 QIHU 360SE", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (" "Change: 287 c9dfb30)", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 " "Safari/537.36", ] # 随机生成user_agent agent = random.choice(USER_AGENT_LIST) return agent #设置谷歌驱动参数时使用: ur = my_useragent() option.add_argument(--user-agent= + ur.process_request())