当前位置: 首页 > news >正文

使用亮数据代理IP爬取PubMed文章链接和邮箱地址

  • 💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】
  • 🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址
  • 🤟 基于Web端打造的:👉轻量化工具创作平台
  • 💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技术交流群】

目录

    • 背景
    • 爬取文章链接
    • 使用代理 IP 进行爬取
    • 爬取邮箱地址
    • 完整代码
    • 总结

背景

最近有同事询问我是否能够帮忙从 PubMed 网站上批量爬取一些邮箱地址,因为其中可能包含我们的潜在客户。我开始尝试了一下,首先选择了一个关键词 h3k56 进行搜索,得到了 228 个结果(文章)。

在这里插入图片描述

爬取文章链接

我们首先需要获取这些文章的链接。在 PubMed 网站上,每个页面只显示十篇文章,并且链接是按照一定规律排列的。

在这里插入图片描述

我们可以将搜索关键词 ‘h3k56’ 的 PubMed 搜索基础 URL 列出来:

base_url = "https://pubmed.ncbi.nlm.nih.gov/?term=h3k56&page="

接下来,我们可以使用 requests 库发送 HTTP 请求,获取网页内容。我们先获取每个页面的文章链接,然后将这些链接存储在一个列表中。以下是具体步骤:

首先,我们导入了 requestsBeautifulSoup 库,它们用于发送 HTTP 请求和解析 HTML 页面。

import requests
from bs4 import BeautifulSoup

然后,我们定义了基础的 PubMed 搜索 URL base_url,用于搜索关键词 'h3k56',以及总共的页面数 total_pages 和用于存储文章链接的列表 article_links

base_url = "https://pubmed.ncbi.nlm.nih.gov/?term=h3k56&page="  # PubMed搜索基础URL,搜索关键词'h3k56'
total_pages = 23  # 总共的页面数
article_links = []  # 存储文章链接的列表

接下来,我们使用一个循环来遍历每一页的链接,并发送 HTTP 请求以获取页面内容。

for page_num in range(1, total_pages + 1):url = base_url + str(page_num)  # 构建当前页面的完整URLresponse = requests.get(url)  # 发起GET请求获取页面内容

在每次请求成功后,我们使用 BeautifulSoup 解析页面内容,查找具有 'docsum-title' 类的 <a> 标签,并提取其中的 href 属性,拼接成完整的文章链接,并将其添加到 article_links 列表中。

if response.status_code == 200:  # 如果响应码为200,表示请求成功soup = BeautifulSoup(response.text, 'html.parser')  # 使用BeautifulSoup解析页面内容for a in soup.find_all('a', class_='docsum-title', href=True):  # 查找具有'docsum-title'类的<a>标签article_links.append("https://pubmed.ncbi.nlm.nih.gov" + a['href'])  # 将找到的文章链接添加到列表中

最后,我们打印出所有爬取到的文章链接列表。

print(article_links)  # 打印所有文章链接列表

运行程序,大概等待了半分钟,完整输出了 228 篇文章的链接。

在这里插入图片描述
这样,我们就完成了获取 PubMed 文章链接的过程。接下来,我们将介绍如何使用代理 IP 进行爬取,并爬取文章中的邮箱地址。

好的,现在我们来继续介绍如何使用代理 IP 进行爬取,并爬取文章中的邮箱地址。

使用代理 IP 进行爬取

考虑到一些网站对频繁访问或大量请求会有限制,可能采取封禁IP或者设立验证码等措施。使用IP代理服务可以使爬虫在请求目标网站时轮换IP,从而规避了被网站封禁的风险。这里我采用的是亮数据IP代理服务。

首先,我们需要导入 requests 库,并定义一个代理 IP 的地址。假设代理 IP 的地址是 http://127.0.0.1:8000

import requestsproxy = "http://127.0.0.1:8000"

接着,我们修改发送请求的方式,使用 requests.get 方法的 proxies 参数来设置代理 IP。

response = requests.get(url, proxies={"http": proxy, "https": proxy})

这样,我们就可以通过代理 IP 发送请求了。接下来我们获取文章中的邮箱地址。

爬取邮箱地址

为了使用Selenium库获取文章中的邮箱地址,我们首先需要导入相关的库。Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作,比如点击、输入、提交表单等。

from selenium import webdriver
import re
import time

然后,我们需要设置Chrome浏览器的选项,以及要爬取的文章链接列表和存储提取到的邮箱地址的列表。

# 设置ChromeOptions以指定Chrome二进制文件位置和其他选项
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"  # 请根据你的Chrome安装路径进行修改# 加载ChromeDriver并应用Chrome选项
driver = webdriver.Chrome(options=chrome_options)# 要爬取的文章链接列表
article_links = ['https://pubmed.ncbi.nlm.nih.gov/35290816/', 'https://pubmed.ncbi.nlm.nih.gov/33668997/', ...]  # 这里省略了大部分链接# 存储提取到的邮箱地址
email_addresses = []

然后我们可以使用Selenium模拟浏览器打开每个文章链接,并从页面中提取邮箱地址。

# 遍历文章链接列表
for link in article_links:driver.get(link)time.sleep(2)  # 等待页面加载# 使用正则表达式查找页面中的邮箱地址email_matches = re.findall(r'[\w\.-]+@[\w\.-]+\.[a-zA-Z]+', driver.page_source)# 如果找到邮箱地址则添加到列表中if email_matches:for email in email_matches:email_addresses.append(email)

最后,关闭浏览器并打印提取到的邮箱地址。

# 关闭浏览器
driver.quit()# 打印提取到的邮箱地址
print(email_addresses)

这样,我们就可以使用Selenium库在每个文章链接中提取到邮箱地址了。

运行效果如下,selenium 会自动打开浏览器,访问这两百多个页面

在这里插入图片描述

待页面访问完成即可输出邮箱地址

在这里插入图片描述

到这里我们就大功告成了。

完整代码

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import re
import time# 定义代理IP地址
proxy = {'http': 'http://your_proxy_ip:your_proxy_port','https': 'https://your_proxy_ip:your_proxy_port'
}# 设置请求头
headers = {'User-Agent': 'Your User Agent'
}# 设置ChromeOptions以指定Chrome二进制文件位置和其他选项
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"  # 请根据你的Chrome安装路径进行修改
chrome_options.add_argument('--proxy-server=http://your_proxy_ip:your_proxy_port')  # 添加代理IP地址# 加载ChromeDriver并应用Chrome选项
driver = webdriver.Chrome(options=chrome_options)# PubMed搜索基础URL,搜索关键词'h3k56'
base_url = "https://pubmed.ncbi.nlm.nih.gov/?term=h3k56&page="# 总共的页面数
total_pages = 23# 存储文章链接的列表
article_links = []# 遍历页面获取文章链接
for page_num in range(1, total_pages + 1):url = base_url + str(page_num)  # 构建当前页面的完整URLtry:# 发起GET请求获取页面内容response = requests.get(url, headers=headers, proxies=proxy)if response.status_code == 200:  # 如果响应码为200,表示请求成功soup = BeautifulSoup(response.text, 'html.parser')  # 使用BeautifulSoup解析页面内容for a in soup.find_all('a', class_='docsum-title', href=True):  # 查找具有'docsum-title'类的<a>标签article_links.append("https://pubmed.ncbi.nlm.nih.gov" + a['href'])  # 将找到的文章链接添加到列表中else:print(f"检索页面失败 {url}")  # 请求失败时输出错误信息except Exception as e:print(f"请求异常: {e}")# 打印所有文章链接列表
print(article_links)# 存储提取到的邮箱地址
email_addresses = []# 遍历文章链接列表并提取邮箱地址
for link in article_links:try:driver.get(link)time.sleep(2)  # 等待页面加载# 使用正则表达式查找页面中的邮箱地址email_matches = re.findall(r'[\w\.-]+@[\w\.-]+\.[a-zA-Z]+', driver.page_source)# 如果找到邮箱地址则添加到列表中if email_matches:for email in email_matches:email_addresses.append(email)except Exception as e:print(f"提取邮箱地址异常: {e}")# 关闭浏览器
driver.quit()# 打印提取到的邮箱地址
print(email_addresses)

总结

以上是一个简单的爬虫示例,展示了如何使用亮数据的IP代理服务来爬取网页链接以及邮箱地址。通过亮数据的IP代理服务,我们可以轻松地突破网站的封锁,实现数据的高效获取。希望通过以上示例能够帮助大家更好地理解IP代理服务的重要性和使用方法。

如果您对IP代理服务感兴趣,可以通过亮数据官网了解更多信息。

相关文章:

使用亮数据代理IP爬取PubMed文章链接和邮箱地址

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…...

electron调用dll时应用程序闪退

electron调用dll时&#xff0c;直接闪退&#xff0c;且用如下方式监听无任何输出&#xff1a; window-all-closed 或 will-quit 此时需要检查传给dll的参数及参数类型是否正确&#xff0c;特别是使用ffi-napi时调用dll&#xff0c;使用 ref-napi定义类型&#xff0c;经常容易…...

单片机原理及技术(三)—— AT89S51单片机(二)(C51编程)

一、AT89S51单片机的并行I/O端口 1.1 P0口 AT89S51的P0口是一个通用的I/O口&#xff0c;可以用于输入和输出。每个引脚都可以通过软件控制为输入或输出模式。 1.1.1 P0口的工作原理 P0口的工作原理是通过对P0寄存器的读写操作来控制P0口的引脚。 输出模式&#xff1a;当P0口…...

摄影店展示服务预约小程序的作用是什么

摄影店包含婚照、毕业照、写真、儿童照、工作照等多个服务项目&#xff0c;虽然如今人们手机打开便可随时拍照摄影&#xff0c;但在专业程度和场景应用方面&#xff0c;却是需要前往专业门店服务获取。 除了进店&#xff0c;也有外部预约及活动、同行合作等场景&#xff0c;重…...

【数据分析基础】实验一 Python运算符、内置函数、序列基本用法

一、实验目的 熟练运用Python运算符。熟练运用Python内置函数。掌握Python的基本输入输出方法。了解lambda表达式作为函数参数的用法。掌握列表、元组、字典、集合的概念和基本用法。了解Python函数式编程模式。 二、实验内容&#xff1a; 1. 在命令模式测试如下命令&#x…...

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南 大家好 我是寸铁&#x1f44a; 总结了【Redis】构建强韧的远程Redis连接与端口保障机制完美指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 在当今的软件开发领域中&#xff0c;远程访问和操作数据存储是极为常见…...

Flowable项目启动报错#java.time.LocalDateTime cannot be cast to java.lang.String

Flowable 项目启动后报错 flow项目第一次启动创建表成功&#xff0c;但是第二次启动时报错信息如下&#xff1a; 1、Error creating bean with name ‘appRepositoryServiceBean’ defined in class 2、Error creating bean with name ‘flowableAppEngine’: FactoryBean t…...

《数字电路》

问答题4*5 在数字电路中&#xff0c;三极管经常工作在哪两种开关状态&#xff1f; 在数字电路中&#xff0c;三极管经常工作在饱和导通状态和截止状态。 时序电路根据输出信号分为哪两类&#xff1f; 时序电路根据输出信号分为莫尔型和米里型两类。 写出三种以上常用的二-十…...

STM32F103 点亮LED闪烁与仿真

STM32F103 点亮LED闪烁与仿真 今天给大家分享一下STM32 流水灯简单的仿真吧&#xff0c;我感觉这个提供有用的&#xff0c;但是自己也是第一次使用&#xff0c;主要是感觉曲线很高级。在PWM中查看脉宽很有用。 code: led.c #include "led.h" #include "delay…...

阿里云服务器发送邮件失败 Could not connect to SMTP host: smtp.xxx.com, port: 465;

最近做了一个发送邮件的功能&#xff0c; 在本地调试完成后&#xff0c;部署到阿里云服务器就一直报错&#xff0c; Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465; 网上也搜索了很多的资料&#xff0c;最后花了好几个小时才解决&#xff0c; 报错日志如下…...

Socket编程权威指南(二)完美掌握TCP流式协议及Socket编程的recv()和send()

在上一篇文章中&#xff0c;我们学习了Socket编程的基础知识&#xff0c;包括创建Socket、绑定地址、监听连接、接收连接等操作。然而&#xff0c;真正的套接字编程远不止于此。本文将重点介绍TCP 流式协议&#xff0c;什么是粘包问题&#xff1f;如何解决粘包问题 &#xff1f…...

当C++的static遇上了继承

比如我们想要统计下当前类被实例化了多少次&#xff0c;我们通常会这么写 class A { public:A() { Count_; }~A() { Count_--; }int GetCount() { return Count_; }private:static int Count_; };class B { public:B() { Count_; }~B() { Count_--; }int GetCount() { return …...

Three.js中的Raycasting技术:实现3D场景交互事件的Raycaster详解

前言 在Web开发中&#xff0c;Three.js是一个极为强大的库&#xff0c;它让开发者能够轻松地在浏览器中创建和展示3D图形。随着3D技术在网页设计、游戏开发、数据可视化等领域的广泛应用&#xff0c;用户与3D场景的交互变得日益重要。而要实现这种交互&#xff0c;一个核心的技…...

5 分钟内构建一个简单的基于 Python 的 GAN

文章目录 一、说明二、代码三、训练四、后记 一、说明 生成对抗网络&#xff08;GAN&#xff09;因其能力而在学术界引起轩然大波。机器能够创作出新颖、富有灵感的作品&#xff0c;这让每个人都感到敬畏和恐惧。因此&#xff0c;人们开始好奇&#xff0c;如何构建一个这样的网…...

智能硬件产品中常用的参数存储和管理方案

一、有哪些参数需要管理? 在智能硬件产品中,一般有三类数据需要存储并管理: 1. 系统设置数据 系统设置数据是指产品自身正常工作所依赖的一些参数。 这类数据的特点:只能在生产过程中修改,出厂后用户无权限修改。 比如:产品SN、产品密钥/token/license、传感器校准值…...

SwiftUI中Mask修饰符的理解与使用

Mask是一种用于控制图形元素可见性的图形技术&#xff0c;使用给定视图的alpha通道掩码该视图。在SwiftUI中&#xff0c;它类似于创建一个只显示视图的特定部分的模板。 Mask修饰符的定义&#xff1a; func mask<Mask>(alignment: Alignment .center,ViewBuilder _ ma…...

全光网络与传统网络架构的对比分析

随着信息技术的飞速发展&#xff0c;网络已经成为我们日常生活中不可或缺的一部分。在这个信息爆炸的时代&#xff0c;全光网络和传统网络架构作为两种主流的网络技术&#xff0c;各有其特点和适用范围。本文将对这两种网络架构进行详细的对比分析&#xff0c;帮助读者更好地了…...

stack overflow复现

当你在内存的栈中&#xff0c;存放了太多元素&#xff0c;就有可能在造成 stack overflow这个问题。 今天看看如何复现这个问题。 下图&#xff0c;是我写的程序&#xff0c;不断的创造1KB的栈&#xff0c;来看看执行了多少次&#xff0c;无限循环。 最后结果是7929kB时, 发…...

mybatis使用笔记

文章目录 打印sql日志mybatis-config.xml方式application.yml里面配置配置类配置方式 其他扫描方式官网文档 mybatis用了那么久&#xff0c;实际一直不明白&#xff0c;做个笔记吧。 打印sql日志 实测&#xff0c;mybatis-config.xml方式好用(记得注掉yml里的相关配置) mybat…...

学习笔记——路由网络基础——路由概述

一、路由概述 1、路由定义与作用 路由(routing)是指导报文转发路径信息&#xff0c;通过路由可以确认转发IP报文的路径。 路由&#xff1a;是指路由器从一个接口上收到数据包&#xff0c;根据数据包的目的地址进行定向并转发到另一个接口的过程。 路由(routing)的定义是指分…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1&#xff0c; 携带经纬度海拔的话题主要有三个&#xff1a; /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码&#xff0c;来分析他们的发布过程。发现前两个话题都对应了同一…...