做电工的有接单的网站吗,有了网站开发app是不是更容易,10_10_微信里网站怎么做的,手机企业网站模板#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】#x1f91f; 一站式轻松构建小程序、Web网站、移动应用#xff1a;#x1f449;注册地址#x1f91f; 基于Web端打造的#xff1a;#x1f449;轻量化工具创作平台#x1f485; 想寻找共同学习交… 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】 一站式轻松构建小程序、Web网站、移动应用注册地址 基于Web端打造的轻量化工具创作平台 想寻找共同学习交流摸鱼划水的小伙伴请点击【全栈技术交流群】 目录 背景爬取文章链接使用代理 IP 进行爬取爬取邮箱地址完整代码总结 背景
最近有同事询问我是否能够帮忙从 PubMed 网站上批量爬取一些邮箱地址因为其中可能包含我们的潜在客户。我开始尝试了一下首先选择了一个关键词 h3k56 进行搜索得到了 228 个结果文章。 爬取文章链接
我们首先需要获取这些文章的链接。在 PubMed 网站上每个页面只显示十篇文章并且链接是按照一定规律排列的。 我们可以将搜索关键词 ‘h3k56’ 的 PubMed 搜索基础 URL 列出来
base_url https://pubmed.ncbi.nlm.nih.gov/?termh3k56page接下来我们可以使用 requests 库发送 HTTP 请求获取网页内容。我们先获取每个页面的文章链接然后将这些链接存储在一个列表中。以下是具体步骤
首先我们导入了 requests 和 BeautifulSoup 库它们用于发送 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/?termh3k56page # 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, hrefTrue): # 查找具有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(optionschrome_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-serverhttp://your_proxy_ip:your_proxy_port) # 添加代理IP地址# 加载ChromeDriver并应用Chrome选项
driver webdriver.Chrome(optionschrome_options)# PubMed搜索基础URL搜索关键词h3k56
base_url https://pubmed.ncbi.nlm.nih.gov/?termh3k56page# 总共的页面数
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, headersheaders, proxiesproxy)if response.status_code 200: # 如果响应码为200表示请求成功soup BeautifulSoup(response.text, html.parser) # 使用BeautifulSoup解析页面内容for a in soup.find_all(a, class_docsum-title, hrefTrue): # 查找具有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代理服务感兴趣可以通过亮数据官网了解更多信息。