Python批量爬取数据与去重方法

在进行英文取名项目对数据的爬取与分析中,经常会对已经存储的批量数据去获取更多有效的数据,这个时候我们需要考虑去重复问题,以及在高频率访问网站导致连接超时中断等问题。

1. 去重复解决方法

设置缓冲区:当我们进行批量处理时,也许会发现在过万条数据里面存在些许重复项数据,这个时候如果我们针对这些数据继续去获取更多的数据时,依然会得到无效的重复项数据,同时考虑到程序容易中断问题,在对数据进行 “a” (追加)操作时,经常会导致原本获取的大量数据又得重新再次爬取,所以本人想到如下方法:

1.1在爬虫的时候使用异常处理方法

利用try-except方法:

def main():
	url = 'https://www.douban.com/search?q=' + str(MoviesName)
   try:
       print("正在连接中...")
       data = requests.get(url, headers=headers, proxies=proxy_temp).text
       #将获取的数据写道到csv文件中,调用write1()函数进行写入
       write1(EnName,MoviesName,Plot)
       #将操作使用过的MoviesName写入缓冲区,作为该行数据已处理过的记录
       write_redis(MoviesName)
   except:
       #程序连接失败,执行异常处理,将无法连接的数据写入到另一个csv文件中作为记录
       print("该电影名无法得到剧情数据...")
       write2(EnName,MoviesName)
       #将操作使用过的MoviesName写入缓冲区,作为该行数据已处理过的记录
       write_redis(MoviesName)

PS(该代码部分只贴入了部分代码,并不完整,主要用于体现try-except方法的使用)

1.2设置缓冲区

创建一个新的文件用来记录操作过的数据,在每次迭代执行主函数时,首先进行读取该文件,如果迭代获取的数据在该文件中,则跳过主函数的执行,如若不在其中,则证明该行数据没有被执行使用过,则调用主函数拿到该数据的相关数据信息。

def write_redis():
     with open('new_redis.txt', 'a', newline='', encoding='utf-8') as f:
        f.write(MoviesName)
        f.write('\n')

def main():
    df = pd.read_csv('All_Movie_1.10.csv',encoding='utf-8',sep=',',engine='python')
    for i in df.index:
        row = df.loc[i]
        MoviesName = row['MoviesName']
        EnName = row['EnName']
        with open ('new_redis.txt','r',encoding='utf-8') as f:
            #读取该txt文件,返回对象给data
            data = f.readlines()
            #如果该条数据MoviesName不在该对象中,则执行主函数
            if MoviesName not in data:
                main(MoviesName,EnName)

该方法可成功避免程序因为各种原因导致中断,而需要重新爬取批量数据的操作。如果程序中断,依然可以继续运行代码,同时继续在CSV文件后追加新的数据,而避免重复项的存入。

可以使用Python的pandas和openpyxl库来实现批量爬取Excel内的数据。具体步骤如下: 1. 使用pandas库读取Excel文件,例如: ```python import pandas as pd data = pd.read_excel('filename.xlsx', sheet_name='Sheet1') ``` 其中,`filename.xlsx`为要读取的Excel文件名,`Sheet1`为要读取的工作表名。 2. 遍历读取到的数据,使用爬虫库(比如requests、beautifulsoup等)来爬取相应数据。例如: ```python import requests from bs4 import BeautifulSoup for index, row in data.iterrows(): url = row['url'] # 假设Excel文件中有一个名为'url'的列,存储了需要爬取数据的网址 response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 使用BeautifulSoup解析网页,提取需要的数据 # ... ``` 3. 将爬取到的数据写入Excel文件中。可以使用openpyxl库来实现。例如: ```python from openpyxl import Workbook wb = Workbook() ws = wb.active for index, row in data.iterrows(): # 爬取数据 # ... # 将爬取到的数据写入Excel文件 ws.cell(row=index+1, column=1, value=data1) ws.cell(row=index+1, column=2, value=data2) # ... wb.save('filename.xlsx') ``` 其中,`data1`、`data2`等为爬取到的数据。`ws.cell(row=index+1, column=1, value=data1)`表示将`data1`写入第`index+1`行第1列的单元格中。最后通过`wb.save('filename.xlsx')`保存写入的数据到Excel文件中。 以上是一个基本的批量爬取Excel内数据的流程,具体实现还需要根据实际情况进行调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值