0


[Python私活案例]24行代码,轻松赚取400元,运用Selenium爬取39万条数据

今天分享一单来自金主爸爸的私单,运用简单的爬虫技巧,可以有效的规避反爬机制,正所谓“你有张良计,我有过云梯”。这个案例也很好的体现了python语音的优势,规避了非常复杂的底层逻辑,所见即所得,30分钟收入200。。

1.1 爬虫的思路及分析

当我们接到一个爬虫的单子时,一定要先分析思路,程序员的工作思路往往比代码更重要,思路对了,代码不会还可以查,思路错了,就只能在无尽的报错中呵呵了~~

我接到这个私单,是爬取今年以来的菜市场物价,客户提供的网站为“北京新发地”。可以看到,数据有19733页,每页20条,一共39万多条信息0a092fba040192e5bddab36791b06023.png通过初步的尝试和分析,网站具有一定的反爬机制,点击下一页后,网页并不会整体刷新,替换的只是其中的表格,查看网页源代码,表格部分的来源也是加密的。如果按照以往的方法,就需要复杂的解密,然后再找出页面之间的规律,此时,就凸显出Selenium的优势了。

1.2 Selenium的作用及环境配置

作用:它可以打开浏览器,然后像人一样去操作浏览器。

环境搭建:

1、pip install selenium
2、下载对应“XX浏览器驱动”,解压后的文件放在Python解释器(对应虚拟环境中),下面以谷歌浏览器驱动为例子。

35bb4c3f6a8c4dbe286fcd81b29fd9ef.png

bf82357108e3b957259ea444ae56c996.png

解压后的文件。

da69e1956dd83d39d7d76f316a6780cc.png

在pycharm中可以看到配置的环境在哪里。

a4934ff7e22efa3471b7643b0fed0aa9.png

最后放置时,记得检查驱动命名后面是否有数字等符号,记得去掉。

d1b747a3f8a76151bd2972225bcc5790.png

1.3 代码部分

1、首先是导入使用的模块:

import time  #时间模块
from selenium.webdriver import Chrome  #浏览器驱动模块
from selenium.webdriver.chrome.options import Options  #无头浏览器模块
import csv  #csv的读写模块

2、配置无头浏览器参数(代码基本固定,复制就可使用,配置后,在代码运行中不会再弹出浏览,而是改为后台操作)

opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disbale-gpu")

3、创建一个浏览器对象

web = Chrome(options=opt)  #创建一个浏览器对象
web.get("http://www.xinfadi.com.cn/priceDetail.html")  #用浏览器打开一个网站
time.sleep(3)  # 休息3秒,selenium的缺点就是慢,必须等待上一步完成后才能执行下一步操作,否则容易报错

4、创建一个CSV文件

ex = open("xinfadi_caijia2.csv", mode="w", encoding="utf8")  #打开一个文件
csvwriter = csv.writer(ex)  #设置写入的路径

5、获取表头的xpath,并写入csv文件

xpath_ex = '//*[@id="bbs"]/div/div/div/div[4]/div[1]/div/table/thead/tr'  #运用开发者工具,获取目标信息的xpath
ex_header = web.find_element_by_xpath(xpath_ex).text.split(' ')  #抓取并转换为列表信息
# print(ex_header)  #到这步时可以先测试一下是否能获取到信息
csvwriter.writerow(ex_header)  #将表头写入csv文件

72dff3caf8ea5bfb18b5d65186900045.png
6、运用循环抓取并保存页面信息

num = 0  # 初始化一个页码计数器,用于记录翻页次数
for i in range(0,19803):
    nr_ex = '//*[@id="tableBody"]'  #内容的xpath
    ex_diyiye = web.find_element_by_xpath(nr_ex).text.split(' ')  #提取出内容
    csvwriter.writerow(ex_diyiye)  #写入csv文件
    num = num + 1
    xpath_next = f'//*[@id="layui-laypage-{num}"]/a[7]'  #获取下一页的xpath
    click_next = web.find_element_by_xpath(xpath_next).click()  #定位下一页的xpath
    time.sleep(3)  # 休息3秒

#同上,作用是最后一页的内容的抓取与写入
nr_ex = '//*[@id="tableBody"]'  
ex_diyiye = web.find_element_by_xpath(nr_ex).text.split(' ')  
csvwriter.writerow(ex_diyiye)  

#关闭文件
ex.close()

1.4 总结

简单的24行代码,即可抓取39万条有用的数据,这便是Python的优势。

以上只是selenium的简单运用,代码的写法也是面向过程,虽然比较繁琐,但是易于理解,除此之外,selenium还有实现“按键”、“拖动滑动条”、“输入”等功能,结合图片识别网站,可以实现例如自动登录、自动发送、抢购等许多功能,在这里只是抛砖引玉,谢谢!

标签: python selenium 爬虫

本文转载自: https://blog.csdn.net/xo3ylAF9kGs/article/details/128156665
版权归原作者 算法channel 所有, 如有侵权,请联系我们删除。

“[Python私活案例]24行代码,轻松赚取400元,运用Selenium爬取39万条数据”的评论:

还没有评论