ayyue

编程小白菜

团队项目冲刺第一天

这个月,为软件工程专业团队项目开发冲刺月,为期20天,要求团队协作开发出一款手机端APP,我是易学组成员刘瑞阳,我们的团队博客地址为https://www.cnblogs.com/ixue/p/12556320.html

昨天我们组召开首次scrum敏捷团队开发会议。在会议中安排了从今天开始为期十天的项目冲刺任务。我有信心,也努力认真负责的完成属于我的那部分任务。

在任务分配中,对易学的八大功能模块,我选择了第4/5两项功能,进行编程开发。

计划使用Java语言及数据库完成有关课表编辑导入功能以及利用Python语言和云端服务器等实现对部分重要学习资料的抓取及存储功能。

今天是冲刺的第一天,我简单规划了在之后几天的知识学习及功能实现。今天的目标是完成wjm要求的结对练习的论文相关信息爬取。

目前遇到的问题是对于Python的工作原理不够明确。不清楚Python对于目标网站的访问请求,找到所需要的数据,再解析到想要存储的位置。

解决问题的方式是查看他人总结的有关Python爬虫工作原理的博客。这个是比较清楚的。https://blog.csdn.net/lmseo5hy/article/details/81740339

Python爬虫通过URL管理器,判断是否有待爬URL,如果有待爬URL,通过调度器进行传递给下载器,下载URL内容,并通过调度器传送给解析器,解析URL内容,并将价值数据和新URL列表通过调度器传递给应用程序,并输出价值信息的过程。

url是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。Internet互联网上的每一个网页都具有一个唯一的名称标识,通常称之为URL地址。

在网上找到其他爬取数据的例子,做了一下尝试。

import time
import re
import random
import requests
from bs4 import BeautifulSoup
import pymysql

connection = pymysql.connect(host='localhost',
user='root',
password='163216',
db='paperkey',
port=3306,
charset='utf8') # 注意是utf8不是utf-8

# 获取游标
cursor = connection.cursor()

#url = 'http://epub.cnki.net/grid2008/brief/detailj.aspx?filename=RLGY201806014&dbname=CJFDLAST2018'

#这个headers信息必须包含,否则该网站会将你的请求重定向到其它页面
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'zh-CN,zh;q=0.8',
'Connection':'keep-alive',
'Host':'www.cnki.net',
'Referer':'http://search.cnki.net/search.aspx?q=%E4%BD%9C%E8%80%85%E5%8D%95%E4%BD%8D%3a%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A6&rank=relevant&cluster=zyk&val=CDFDTOTAL',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
}

headers1 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
}

def get_url_list(start_url):
depth = 20
url_list = []
for i in range(depth):
try:
url = start_url + "&p=" + str(i * 15)
search = requests.get(url.replace('\n', ''), headers=headers1)
soup = BeautifulSoup(search.text, 'html.parser')
for art in soup.find_all('div', class_='wz_tab'):
print(art.find('a')['href'])
if art.find('a')['href'] not in url_list:
url_list.append(art.find('a')['href'])
print("爬取第" + str(i) + "页成功!")
time.sleep(random.randint(1, 3))
except:
print("爬取第" + str(i) + "页失败!")
return url_list

def get_data(url_list, wordType):
try:
# 通过url_results.txt读取链接进行访问
for url in url_list:
i = 1;
if url == pymysql.NULL or url == '':
continue
try:
html = requests.get(url.replace('\n', ''), headers=headers)
soup = BeautifulSoup(html.text, 'html.parser')
except:
print("获取网页失败")
try:
print(url)
if soup is None:
continue
# 获取标题
title = soup.find('title').get_text().split('-')[0]
# 获取作者
author = ''
for a in soup.find('div', class_='summary pad10').find('p').find_all('a', class_='KnowledgeNetLink'):
author += (a.get_text() + ' ')
# 获取摘要
abstract = soup.find('span', id='ChDivSummary').get_text()
# 获取关键词,存在没有关键词的情况
except:
print("部分获取失败")
pass
try:
key = ''
for k in soup.find('span', id='ChDivKeyWord').find_all('a', class_='KnowledgeNetLink'):
key += (k.get_text() + ' ')
except:
pass
print("" + str(i) + "url")
print("Title】:" + title)
print("author】:" + author)
print("abstract】:" + abstract)
print("key】:" + key)
# 执行SQL语句
cursor.execute('INSERT INTO cnki VALUES (NULL, %s, %s, %s, %s, %s)', (wordType, title, author, abstract, key))
# 提交到数据库执行
connection.commit()

print()
print("爬取完毕")
finally:
print()

if __name__ == '__main__':
try:
for wordType in {"大肠杆菌", "菌群总落", "胭脂红", "日落黄"}:
wordType = "+" + wordType
start_url = "http://search.cnki.net/search.aspx?q=%s&rank=relevant&cluster=zyk&val=" % wordType
url_list = get_url_list(start_url)
print("开始爬取")
get_data(url_list, wordType)
print("一种类型爬取完毕")
print("全部爬取完毕")
finally:
connection.close()

 

 爬取成功截图。爬取完成,学习代码逻辑结构,下一步实现对cvpr2019的论文信息爬取。

 

posted on 2020-04-15 21:52  ayyue  阅读(336)  评论(0编辑  收藏  举报

导航