项目要求:
针对现在网络中对于学生比赛信息的缺乏,例如“中国软件杯”大学生软件设计大赛、或是创业创新等相关竞赛,请利用爬虫整合赛事信息,并且提供有用信息:
1.爬取比赛标题、日期、比赛内容与网页连接,演示时比赛通知数据量不少于100。(80%)
2.爬虫结果输出类型为json(10%)或者储存在MongoDB(20%)
可以参考:http://bisai.172xiaoyuan.com/index.html 从中获得信息
import json
import requests
from lxml import etree
from urllib.parse import urljoin
from time import sleep
base_url = 'http://bisai.172xiaoyuan.com/plus/arcmulti.php'
def getHtmlContent(page=1):
headers = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
'Host': 'bisai.172xiaoyuan.com',
'Refer': 'http://bisai.172xiaoyuan.com/index.html',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
}
params = {
'mtype': 0,
'pnum': page,
'tagid': 'index'
}
data = requests.get(base_url, headers=headers, params=params).text
if data:
return data
else:
return None
def parseHtml(data):
result = []
html = etree.HTML(data)
for item in html.xpath('//div[@id="z"]/ul'):
activity_title = item.xpath('./li[1]/a/text()')[0]
activity_date = item.xpath('./li[2]/span/text()')[1]
activity_content = item.xpath('./p/text()')[0]
activity_url = urljoin(base_url, item.xpath('./li[1]/a/@href')[0])
result.append({
'比赛标题': activity_title.strip(),
'日期': activity_date.strip(),
'比赛内容': activity_content.strip(),
'网页链接': activity_url
})
return result
def main():
results = []
for i in range(1,10):
content = getHtmlContent(page=i)
if content:
result = parseHtml(content)
results.extend(result)
sleep(3) #不要爬的太快
# print(results) #这种方式就可以直接写入到mongo了
print(json.dumps(results,ensure_ascii=False))
if __name__ == '__main__':
main()
该回答引用ChatGPT
由于本项目需要爬取网页数据,因此需要使用Python语言编写爬虫程序。本项目中,我们将使用Python的requests和BeautifulSoup库来实现爬虫功能,使用pymongo库将数据存储到MongoDB数据库中。
首先,我们需要安装必要的Python库。可以使用以下命令来安装:
pip install requests beautifulsoup4 pymongo
接下来,我们可以编写Python代码来实现爬虫功能。以下是一个简单的爬虫程序示例:
import requests
from bs4 import BeautifulSoup
import pymongo
# 连接MongoDB数据库
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["competition"]
collection = db["notices"]
# 爬取中国软件杯大学生软件设计大赛通知
url = "http://www.cnsoftbei.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
notices = soup.find_all("div", class_="notice-item")
# 将爬取结果存储到MongoDB数据库中
for notice in notices:
title = notice.find("a").text
date = notice.find("span", class_="date").text
content = notice.find("p").text
link = notice.find("a")["href"]
data = {
"title": title,
"date": date,
"content": content,
"link": link
}
collection.insert_one(data)
# 输出MongoDB中的数据
for data in collection.find():
print(data)
在上述代码中,我们首先使用pymongo库连接到MongoDB数据库,并创建一个名为“competition”的数据库和一个名为“notices”的集合。然后,我们使用requests库发送HTTP请求,获取中国软件杯大学生软件设计大赛通知页面的HTML代码,并使用BeautifulSoup库解析HTML代码,提取出通知的标题、日期、内容和链接。最后,我们将提取出的数据存储到MongoDB数据库中,并输出MongoDB中的所有数据。
需要注意的是,上述代码只是一个简单的示例,实际应用中需要根据具体的需求进行修改和优化。同时,为了避免对网站服务器造成过大的负担,我们应该合理设置爬虫程序的访问频率和爬取数据的数量。