解决Python爬虫开发中的数据输出问题:确保正确生成CSV文件

亿牛云代理.png

引言

在大数据时代,爬虫技术成为获取和分析网络数据的重要工具。然而,许多开发者在使用Python编写爬虫时,常常遇到数据输出问题,尤其是在生成CSV文件时出错。本文将详细介绍如何解决这些问题,并提供使用代理IP和多线程技术的完整示例代码,以确保高效、准确地生成CSV文件。

正文

一、常见问题分析

  1. 数据提取不完整:网页结构变化或抓取逻辑错误导致数据提取不全。
  2. 编码问题:不同网页的编码格式不同,可能导致乱码。
  3. 文件写入问题:CSV文件写入过程中的格式或权限问题。

二、解决方案

  1. 使用代理IP:避免因IP被封禁导致的数据提取失败。
  2. 设置User-Agent和Cookie:模拟浏览器行为,提高成功率。
  3. 多线程技术:提升数据抓取效率,减少等待时间。
  4. 编码处理:确保爬取数据的编码统一,避免乱码。

实例

以下代码展示了如何使用代理IP、多线程技术进行高效、稳定的数据抓取,并正确生成CSV文件。示例中使用了亿牛云爬虫代理。

import requests
from bs4 import BeautifulSoup
import csv
import threading
import queue# 常量
SEARCH_URL = "https://pubmed.ncbi.nlm.nih.gov/"
QUERY = "Breast Cancer"
START_DATE = "2023/06/01"
END_DATE = "2023/12/31"
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","Cookie": "your_cookie_here"
}
# 设置代理 亿牛云爬虫代理加强版 www.16yun.cn
PROXY = {"http": "http://username:password@proxy.16yun.cn:12345","https": "http://username:password@proxy.16yun.cn:12345"
}# 线程锁
lock = threading.Lock()# 获取文章链接
def fetch_article_links(query, start_date, end_date):params = {"term": query,"mindate": start_date,"maxdate": end_date}response = requests.get(SEARCH_URL, params=params, headers=HEADERS, proxies=PROXY)soup = BeautifulSoup(response.text, 'html.parser')article_links = [a['href'] for a in soup.find_all('a', class_='docsum-title')]return article_links# 获取文章详情
def fetch_article_details(article_link, data_queue):try:response = requests.get(article_link, headers=HEADERS, proxies=PROXY)soup = BeautifulSoup(response.text, 'html.parser')title = soup.find('h1', class_='heading-title').text.strip()authors = [a.text.strip() for a in soup.find_all('a', class_='full-name')]pub_date = soup.find('span', class_='cit').text.strip()abstract = soup.find('div', class_='abstract-content').text.strip()data_queue.put({"Title": title,"Authors": ", ".join(authors),"Publication Date": pub_date,"Abstract": abstract})except Exception as e:print(f"Error fetching details for {article_link}: {e}")# 保存为CSV文件
def save_to_csv(data_queue, filename='pubmed_breast_cancer.csv'):with lock:with open(filename, mode='w', newline='', encoding='utf-8') as file:writer = csv.DictWriter(file, fieldnames=["Title", "Authors", "Publication Date", "Abstract"])writer.writeheader()while not data_queue.empty():writer.writerow(data_queue.get())# 主函数
def main():article_links = fetch_article_links(QUERY, START_DATE, END_DATE)base_url = "https://pubmed.ncbi.nlm.nih.gov"data_queue = queue.Queue()threads = []for link in article_links:full_link = f"{base_url}{link}"t = threading.Thread(target=fetch_article_details, args=(full_link, data_queue))t.start()threads.append(t)for t in threads:t.join()save_to_csv(data_queue)if __name__ == "__main__":main()

结论

本文介绍了如何通过使用代理IP、设置User-Agent和Cookie、多线程技术,以及正确处理编码等方法,解决Python爬虫开发中的数据输出问题。通过这些措施,开发者可以确保高效、准确地生成CSV文件,为后续数据分析提供可靠支持。希望这篇文章能为您的爬虫开发提供实用的指导和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全的神秘世界】SQL注入(下)

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 3.7 二次注入 不好挖这个漏洞,需要搞懂业务逻辑关系 二次注入通常是指在存入数据库时做了过滤,但是取…

解码AWS EC2:塑造云服务器新标杆的五大核心优势

在云计算领域,亚马逊弹性计算云(Amazon Elastic Compute Cloud, 简称EC2)作为AWS的明星服务,凭借其卓越的性能、灵活性和广泛的生态系统,已经成为企业构建云上基础设施的首选。EC2不仅仅是一个简单的云服务器租用服务&…

“2024软博会” 为软件企业提供集展示、交流、合作一站式平台

随着全球科技浪潮的涌动,软件行业正迎来前所未有的发展机遇,成为了全球新一轮竞争的“制高点”,以及未来经济发展的“增长点”。在当前互联网、大数据、云计算、人工智能、区块链等技术加速创新的背景下,数字经济已经渗透到经济社…

工控软件开发框架,GTK和QT好难选,快来拯救开发者。

工控软件开发框架如何选,有人喜欢GTK,有人钟意QT,而且每个人都有自己的一番道理,好像说的还都有理,这种情况该怎么办呢?大千UI工场带着你深入了解下。 一、GTK是什么 GTK(GIMP Toolkit)是一个…

【JavaWeb】利用IntelliJ IDEA 2024.1.4 +Tomcat10 搭建Java Web项目开发环境(图文超详细)

1、启动IntelliJ idea 2024.1.4 在欢迎页面,请确认好版本。因为不同的版本,搭建项目过程不太一样。 点击,新建项目。如图: 2、新建项目 在新建项目界面,选择java,在右侧信息模块内,根据个人情…

帮公司搭了个Nuxt3项目框架

theme: smartblue 最近公司立项了一个新项目,因为是to C 的,所以对SEO是有较高需求的,由于公司前端技术栈统一用的VUE,顺理成章的就选择了nuxt这个全栈框架。项目立项之后我就被安排了负责前端项目框架的搭建,从搭建过…

高校教师教学质量评估系统-计算机毕业设计源码03344

摘要 在高等教育中,教学质量是培养优秀人才的关键。为了提高教学质量,高校需要建立一套科学、有效的教师教学质量评估系统。本研究采用 SSM技术框架,旨在开发一款高校教师教学质量评估系统。 SSM框架作为一种成熟的Java开发框架,具…

网安小贴士(6)TCP/IP分层

一、前言 1983年,美国国防部决定将TCP/IP作为所有计算机网络的标准协议,这标志着TCP/IP正式成为互联网的基础协议。随着个人计算机的普及和网络技术的发展,TCP/IP模型被广泛应用于各种网络环境中,包括局域网(LAN&#…

【图说中国】大江大河你知道哪些?

【图说中国】大江大河你知道哪些? 中国河流 中国是世界上河流最多国家之一,其中流域面积超过1000平方米河流就有1500多条。 主要有长江、黄河、黑龙江、珠江、淮河、海河、辽河、雅鲁藏布江、塔里木河、澜沧江、怒江、闽江、钱塘江、韩江、鸭绿江、图…

Pandas函数详解:案例解析(第25天)

系列文章目录 Pandas函数详解排序函数聚合函数缺失值处理日期函数 文章目录 系列文章目录前言1 索引和列名操作1.1 查看索引和列名1.2 修改索引和列名 2 常用计算函数2.1 排序函数2.2 聚合函数2.3 练习 3 缺失值处理3.1 缺失值概念3.2 加载包含缺失值数据3.3 查看缺失值3.4 缺失…

十五、【源码】给代理对象设置属性

源码地址:https://github.com/spring-projects/spring-framework 仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/15-proxy-set-property 给代理对象设置属性 之前的代码是创建Bean进行判断,要不要进行代理,如果代理…

物联网应用Fast ingest

一、原文路径 Tuning the System Global Area 二、翻译 1、原理 Fast ingest 优化是针对高并发,单行数据的插入这种场景的。比如IOT应用采集(很符合国网的用采数据场景)。 Fast ingest 使用MEMOPTIMIZE_WRITE 提示来插入数据到 MEMOPTIM…

LVM负载均衡群集

一.群集基础概述 1.群集的类型 (1)负载均衡的群集:以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发的、高负载的整体性能。例如:“DNS轮询”,“应用…

.net 快速开发框架开源

DF.OpenAPI开源系统 前后端分离,开箱即用,java经典功能.net也具备 系统介绍 DF.OpenAPI是基于Admin.NET二开的,是一个开源的多租户后台管理系统。采用前后端分离技术(前端使用vue.js,后端使用.net 3~.net6&#xff…

SyntaxError: invalid character in identifier 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

鸿翼全链智能知识管理,打造大模型时代的企业知识管理新范式

在知识经济的浪潮中,知识已成为企业构筑竞争优势的基石。随着大模型转向应用落地,其强大的语义理解、推理、逻辑、记忆等能力,推动企业知识管理迈向一个“智能涌现”的新时代。 鸿翼大模型KM知识管理系统,植根于非结构化数据治理全…

Mac安装nvm,node

新的Mac安装nvm,最简单的是先安装nvm,再安装node,官网示例代码也是这么整的,如果已经安装了node,不要慌 多几步终端操作可以“没有如果”。分两种情况:1,还没安装node,直接装nvm&…

【C++】初步认识C++

1. 初识C1.1 C概念相关1.2 C发展史及其重要性1.2.1 发展史1.2.2 重要性 2. C关键字3. 命名空间4. 输入和输出 个人主页:C_GUIQU 归属专栏:【C学习】 1. 初识C 1.1 C概念相关 C语言是结构化和模块化的语言,适合处理较小规模的程序。 【来源】…

ctfshow-web入门-命令执行(web118详解)Linux 内置变量与Bash切片

输入数字和小写字母,回显 evil input 查看源码,发现这里会将提交的参数 code 传给 system 函数 使用 burpsuite 抓包进行单个字符的模糊测试 fuzz: 发现过滤掉了数字和小写字母以及一些符号,下面框起来的部分是可用的 结合题目提…

【C++】开源:命令行解析库CLI11配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍命令行解析库CLI11配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#x…