用Python写一个pubmed的爬虫代码
时间: 2023-09-14 08:05:58 浏览: 146
### 回答1:
很高兴为您解答!我可以提供一些参考代码供您参考:
import urllib.request
from bs4 import BeautifulSoup
# 设置请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
# 设置pubmed搜索关键词
keyword = 'Python'
# 设置每页显示的结果数
page_size = 100
# 设置起始页
page_num = 0
# 拼接搜索链接
url = 'https://www.ncbi.nlm.nih.gov/pubmed/?term='+keyword+'&size='+str(page_size)+'&page='+str(page_num)
# 请求网页
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
# 解析网页
soup = BeautifulSoup(response, 'html.parser')
# 找到结果列表
result_list = soup.find_all('div', {'class': 'rslt'})
# 遍历结果列表,获取标题等信息
for result in result_list:
title = result.find('p', {'class': 'title'})
print(title.get_text())
### 回答2:
下面是一个用Python编写的简单pubmed爬虫代码:
```python
import requests
from bs4 import BeautifulSoup
def pubmed_crawler(query):
url = "https://pubmed.ncbi.nlm.nih.gov/"
search_url = url + "search/?term=" + query
# 发起请求
response = requests.get(search_url)
# 解析HTML页面
soup = BeautifulSoup(response.text, "html.parser")
# 获取搜索结果
results = soup.find_all("div", class_="docsum-content")
# 打印标题和摘要
for result in results:
title = result.find("a", class_="docsum-title").text.strip()
abstract = result.find("p", class_="docsum-abstract").text.strip()
print("标题:", title)
print("摘要:", abstract)
print("--------------")
# 示例使用
query = "cancer" # 搜索关键字
pubmed_crawler(query)
```
以上代码使用了`requests`库发送HTTP请求,使用`BeautifulSoup`库解析HTML页面。它首先构建pubmed的搜索URL,然后发起请求并解析搜索结果。最后打印每个搜索结果的标题和摘要。
请注意,这只是一个基本的示例代码,用于演示pubmed爬虫的基本原理。实际使用时,可能需要添加更多功能,例如处理分页、保存结果到文件等。同时,请遵守相关网站的使用条款和爬虫规则,以确保合法使用。
### 回答3:
下面是一个使用Python编写的pubmed爬虫代码的示例:
```python
import requests
from bs4 import BeautifulSoup
def pubmed_spider(query, num_results):
url = f'https://pubmed.ncbi.nlm.nih.gov/?term={query}'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
articles = soup.find_all('article', class_='full-docsum')
results = []
for article in articles[:num_results]:
title = article.find('a', class_='docsum-title').text.strip()
authors = article.find('span', class_='docsum-authors').text.strip()
journal = article.find('span', class_='docsum-journal-citation-full').text.strip()
pub_date = article.find('span', class_='docsum-journal-citation-date').text.strip()
abstract = article.find('div', class_='docsum-content').text.strip()
results.append({
'title': title,
'authors': authors,
'journal': journal,
'pub_date': pub_date,
'abstract': abstract
})
return results
# 调用爬虫函数,搜索关键字为 "COVID-19",获取前5条结果
search_results = pubmed_spider('COVID-19', 5)
# 打印结果
for result in search_results:
print('标题:', result['title'])
print('作者:', result['authors'])
print('期刊:', result['journal'])
print('发布日期:', result['pub_date'])
print('摘要:', result['abstract'])
print('---')
```
这段代码首先通过requests模块发送GET请求获取pubmed网站上搜索结果页面的HTML内容。然后,使用BeautifulSoup模块解析HTML页面,提取文章的标题、作者、期刊、发布日期和摘要等信息。最后,将提取的信息保存在一个字典中,并加入到结果列表中。代码中的`pubmed_spider`函数接受两个参数:搜索关键字和结果数量。调用这个函数将返回一个包含结果的列表。然后,我们使用搜索关键字"COVID-19"调用`pubmed_spider`函数,并限制结果数量为5。最后,我们将结果打印出来,包括标题、作者、期刊、发布日期和摘要。
请注意,本示例仅用于演示目的。要实现一个更完整、健壮的pubmed爬虫,您可能需要更详细的数据清洗和错误处理等功能。另外,不要忘记尊重网站的使用规则,并确保您的爬取行为合法、合规。
阅读全文