【从零开始的python生活①】手撕爬虫扒一扒力扣的用户刷题数据(2)

简介: 【从零开始的python生活①】手撕爬虫扒一扒力扣的用户刷题数据(2)

三、网站元素定位

对于元素定位这块会比较麻烦,我单独讲一讲


确定元素

首先要确定要找元素的特征

5511b335779c50dc45b0dacdb439d9a.png

我这里就要扒一扒对应地址的解决问题数。我们可以按ctrl+shift+c 然后点对应的元素就会像图上这样出现我要的元素位置。

然后我们很容易发现他是在解决问题的同级别的<b>标签下。

我们可以用相对位置来定位


//*[text()="解决问题"]


这个表示的是找到解决问题对应的标签

我们需要的数据其实是其同层级下的b标签的数据

那么就是


//*[text()="解决问题"]/../b


其中…表示上级目录 我们就可以定位到所要的数据了


submitTag = driver.find_elements_by_xpath('//*[text()="解决问题"]/../b')
distance = submitTag[0].text


最后就是拿到我们想要的数据 我们需要的数据格式是text


网络延迟

如果我们因为网络延迟或者访问量过大没有抓到数据怎么办呢?

我的想法就是休息3s再抓,如果重试5次还是抓不到那就下一个跳过

那我们怎么直到抓没抓到呢?


submitTag = driver.find_elements_by_xpath('//*[text()="解决问题"]/../b')


这句里面用的elements返回的是个列表,所以长度为0就是没找到

然后是等待重试语句


 

if(len(submitTag) == 0):
        for k in range(1,5):
            sleep(3)
            driver.get(lie)
            submitTag = driver.find_elements_by_xpath('//*[text()="解决问题"]/../b')
            if(len(submitTag) != 0):
                break
        if(len(submitTag) == 0):
            print("false")
            i+=1
            continue

看着很长。其实一点也不复杂,第一个for会进行五次重试,每次重试完如果拿到数据就跳出

如果5次循环结束还是拿不到,就让i+1其实就是跳过了这组数据啦。


五、最终成果

import pandas as pd
import openpyxl
from selenium import webdriver
from time import sleep
num = 10        #写入的数据列 
driver = webdriver.Chrome()
df = pd.read_excel('111.xlsx',index_col='LeetCode地址')
#读取一整列的数据
wb=openpyxl.load_workbook(r'111.xlsx')
ws = wb['Sheet1']
i = 1
for lie in df.index.values:
    driver.get(lie)
    submitTag = driver.find_elements_by_xpath('//*[text()="解决问题"]/../b')
    if(len(submitTag) == 0):
        for k in range(1,5):
            sleep(3)
            driver.get(lie)
            submitTag = driver.find_elements_by_xpath('//*[text()="解决问题"]/../b')
            if(len(submitTag) != 0):
                break
        if(len(submitTag) == 0):
            print("false")
            i+=1
            continue
    distance = submitTag[0].text
    ws.cell(row = i+1, column = num).value = distance
    i=i+1
    print(i)
wb.save(r'111.xlsx')


利用num保存写入列是为了以后能够方便修改 打印i是为了能看到进度

7f72a03ce9aef16ef3815bb183a88f8.png


六、写在最后

当然这个只是第一次入门的小作品,其中没用封装成函数,也没有用到类对象什么的高级运用,但是可以作为一个语言的基础中的基础中的入门,如果大家喜欢这个系列还麻烦大家给个赞啥的。


相关文章
|
7天前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
8天前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
9天前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
17天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
60 6
|
10天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
10天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
20 1
|
15天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
36 7
|
11天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
12天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
18天前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
37 6