Selenium(web自动化工具),也可用来爬虫,效率会比requests慢,对于某些网站有反爬机制可以使用此方法。
导入selenium,sleep(间隔时间),csv(数据存储)模块,没有可以进行下载
定义方法writecsv,把爬取数据存储为 CSV文件
谷歌浏览器驱动,下载与浏览器相同版本
链接:CNPM Binaries Mirror
windows只有32位
下载驱动解压文件位置
网站链接
for循环抓取多少条数据(自己视情况而定) ,+str(i)+字符串拼接,用于循环
某些网站在列表点击之后会进入详情页(招工网站为例),会打开一个新的页面,需要用此方法,当前页面跳转可以不用
通过Xpath定位,爬取需要数据(注:爬取数据为文本格式,需要在xpath后面加text)
最后存放在一个列表里面
调用writecsv方法,存放数据
下面为完整代码:
# -*- coding:utf-8 -*-
from selenium import webdriver
from time import sleep
import csv
def writecsv(item):
with open('2022.03.07.csv', 'a', encoding='utf-8', newline='') as f:
wir = csv.writer(f)
try:
wir.writerow(item)
except:
print('error')
driver = webdriver.Chrome(r'E:Googlechromedriver.exe')
driver.get('http://www.xintairencai.com/index.asp')
sleep(1)
for i in range(1, 61):
driver.get('http://www.xintairencai.com/Recruit/index.html')
sleep(1)
try:
# 发布时间
sj = driver.find_element_by_xpath('//*[@id="recruit_list"]/li[1]/div[6]').text
# 点击详情页
driver.find_element_by_xpath('//*[@id="recruit_list"]/li[' + str(i) + ']/div[2]/a').click()
sleep(1)
# 操作新窗口
windows = driver.window_handles
driver.switch_to.window(windows[-1])
sleep(1)
# 标题
bt = driver.find_element_by_xpath(
'/html/body/div[4]/table/tbody/tr/td/table/tbody/tr[2]/td[3]/div/table/tbody/tr[3]/td/div/table/tbody/tr[1]/td[2]/font')
gz = driver.find_element_by_xpath(
'/html/body/div[4]/table/tbody/tr/td/table/tbody/tr[2]/td[3]/div/table/tbody/tr[3]/td/div/table/tbody/tr[10]/td[2]/font').text
# 招工信息
xx = driver.find_element_by_xpath(
'/html/body/div[4]/table/tbody/tr/td/table/tbody/tr[2]/td[3]/div/table/tbody/tr[3]/td/div/table/tbody/tr[13]/td[2]/font')
# 工作所在地
sheng1 = '山东省'
# 市
shi = '新泰市'
# 县
xian = '无'
# 详细地址
xxdz = driver.find_element_by_xpath(
'/html/body/div[4]/table/tbody/tr/td/table/tbody/tr[2]/td[3]/div/table/tbody/tr[5]/td/div/table/tbody/tr[2]/td[2]/span').text
# 姓名
xm = driver.find_element_by_xpath(
'/html/body/div[4]/table/tbody/tr/td/table/tbody/tr[2]/td[3]/div/table/tbody/tr[5]/td/div/table/tbody/tr[5]/td[4]/span')
# 电话
dh = driver.find_element_by_xpath(
'/html/body/div[4]/table/tbody/tr/td/table/tbody/tr[2]/td[3]/div/table/tbody/tr[5]/td/div/table/tbody/tr[3]/td[2]/span')
list_1 = [bt.text, gz, xx.text, sj, xm.text, dh.text, sheng1, shi, xian, xxdz]
print(list_1)
writecsv(list_1)
except:
print('error')



