首页 > 其他分享 >团队开发冲刺第一天

团队开发冲刺第一天

时间:2022-10-03 23:03:57浏览次数:78  
标签:第一天 listp 冲刺 class content soup print 团队 find

今天是团队冲刺开发的第一天:

  我给我们的团队里的每个人分配了现阶段的任务,我自己领取的任务是:

①爬取铁道大学官网的新闻

②将新闻准确的展示在“铁大新闻”板块上,并且可以点击后观看整篇新闻。

 

今天利用爬虫去解析铁道大学新闻官网:​​http://xcb.stdu.edu.cn/2009-05-05-02-26-33.html​

分析后发现其标题都是在tr,class="sectiontableentry1"和class=“sectiontableentry2”的里面,因此我就将这两种全部获取

获取后遍历存储他们的href(单个新闻的网址)

通过对单个网址进行分析,打算存入数据库里的信息有:标题,日期,点击次数,正文,图片链接

对于标题,日期,点击次数比较简单

难点在于:正文的爬取和图片链接

 

①爬取正文时:正文都在div.article-content下的p标签里,因此我们获取所有的p标签的集合

一开始我以为就是在p标签下的span里的是正文,爬取了10个后发现漏了一点东西,原来b标签里的也是正文里的内容

由于整篇文章是有p标签分割的,一个p标签代表这一段,因此我将爬取的所有p标签遍历,之后通过p的contents来访问他的子节点,根据子节点的name属性来判断是“span”还是“p”,爬取完一段后存储到正文集合里。

r=requests.get(url,headers=headers)
content=r.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
trs=soup.find_all('tr',class_='sectiontableentry1')
trs+=soup.find_all('tr',class_='sectiontableentry2')
for i in range(len(trs)):
strs='http://xcb.stdu.edu.cn/'
link=strs+trs[i].a['href']
r = requests.get(link, headers=headers)
content = r.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
title=soup.find('h2',class_='contentheading').text.strip()
title=title.replace(' ', '')
date=soup.find('span',class_='createdate').text.strip()[5:]
click=soup.find('span',class_='hits').text.strip()[5:-1]
#print(title,date,click)
#用来截取文章内容

doc=[]
listp=soup.select('div.article-content > p')
for j in range(len(listp)):
#print(listp[j])
pp=''
for k in range(len(listp[j].contents)):
if(listp[j].contents[k].name=='span'):
pp+=listp[j].contents[k].text
elif(listp[j].contents[k].name=='b'):
pp+=listp[j].contents[k].span.text
doc.append(pp)
doc='\n'.join(doc)
#print(doc)

 

②爬取图片链接:

一开始也是以为只是在span里的input标签里,之后爬取10条数据后比较原文发现少了几张图片,于是回头在取分析少的图片,发现原来有的图片在img标签里

然后再爬取image里的图片链接,之后将两个爬取的链接合并,图片链接之间用空格分割

 

单个网页爬取完成后,分析我要是爬取10页内容,发现他们之间的规律,每翻一页后面就会发生变化:

第一页:​​http://xcb.stdu.edu.cn/2009-05-05-02-26-33.html​

第二页:​​http://xcb.stdu.edu.cn/2009-05-05-02-26-33.html?start=10​

第三页:​​http://xcb.stdu.edu.cn/2009-05-05-02-26-33.html?start=20​

发现start里的数字都是10个10的加,因此我们就可以翻页爬取,然后存入数据库

 

数据库截图:

团队开发冲刺第一天_sql

 

 

python源码:

import requests
from bs4 import BeautifulSoup
import json
import pymysql
import time

headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}#创建头部信息
newlist=[]


for page in range(10):
number=10*page
url='http://xcb.stdu.edu.cn/2009-05-05-02-26-33.html?start='+str(number)
f=page+1
print('这是第'+str(f)+'页')

r=requests.get(url,headers=headers)
content=r.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
trs=soup.find_all('tr',class_='sectiontableentry1')
trs+=soup.find_all('tr',class_='sectiontableentry2')
for i in range(len(trs)):
strs='http://xcb.stdu.edu.cn/'
link=strs+trs[i].a['href']
r = requests.get(link, headers=headers)
content = r.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
title=soup.find('h2',class_='contentheading').text.strip()
title=title.replace(' ', '')
date=soup.find('span',class_='createdate').text.strip()[5:]
click=soup.find('span',class_='hits').text.strip()[5:-1]
#print(title,date,click)
#用来截取文章内容

doc=[]
listp=soup.select('div.article-content > p')
for j in range(len(listp)):
#print(listp[j])
pp=''
for k in range(len(listp[j].contents)):
if(listp[j].contents[k].name=='span'):
pp+=listp[j].contents[k].text
elif(listp[j].contents[k].name=='b'):
pp+=listp[j].contents[k].span.text
doc.append(pp)
doc='\n'.join(doc)
#print(doc)


#用来截取input里的图片
inputs=soup.find_all('input')
imgs=''
for k in range(len(inputs)):
src='http://xcb.stdu.edu.cn/'
img=src+inputs[k]['src']
if(k!=0):
imgs+=' '+img
else:
imgs+=img
#用来截取img里的图片
newimgs=soup.find_all('img')
newimg=''
for p in range(len(newimgs)):
src = 'http://xcb.stdu.edu.cn/'
imk=src+newimgs[p]['src']
if (p != 0):
newimg += ' ' + imk
else:
newimg += imk
#获取的总图片
url=imgs+' '+newimg
#print(url)

newvalue=(title,date,click,doc,url)
newlist.append(newvalue)
#数据库存储的实现
tupnewlist=tuple(newlist)
print(tupnewlist)
db = pymysql.connect("localhost", "root", "fengge666", "baixiaosheng", charset='utf8')
cursor = db.cursor()
sql_news = "INSERT INTO tdnews values (%s,%s,%s,%s,%s)"
sql_clean_news = "TRUNCATE TABLE tdnews"


try:
cursor.execute(sql_clean_news)
db.commit()
except:
print('执行失败,进入回调1')
db.rollback()

try:
cursor.executemany(sql_news,tupnewlist)
db.commit()
except:
print('执行失败,进入回调3')
db.rollback()
db.close()


 



标签:第一天,listp,冲刺,class,content,soup,print,团队,find
From: https://blog.51cto.com/u_14824425/5730598

相关文章

  • C#学习第一天
      今天进行了C#的初步学习,主要了解了C#的相关知识:目录基础语法数据类型值类型引用类型动态(Dynamic)类型字符串类型指针类型类型转换变量常量运算符判断循环封装基础......
  • Azure DevOps Server 交付计划,提高大型研发团队的协作效率
    笔者参与过的多个大型(超过千人)软件研发团队的协作过程中,都不约而同的碰到一个相似的问题:由于研发团队庞大、信息系统众多、信息系统之间的关联关系错综复杂,往往一个重要的......
  • NOIP冲刺 【图论复习】 图的遍历
    还有两个月就NOIP了我居然还在敲这种东西.........洛谷P5318DFSBFS模版题复习一下DFS:从第一个节点开始搜用vis数组记忆化搜到每一个点时如果没搜过就把他标记......
  • 秋式开源团队:权限管理系统需求与分析
    以下为正文内容:项目的目标提供一个调用简单、可复用性高、满足一般需求的权限管理模块。为需要对权限管理的系统节省开发本。产品的用户开发基于.net且权限管理较为复杂的系......
  • 如何组织团队技术分享的一点心得和建议 All In One
    如何组织团队技术分享的一点心得和建议AllInOne团队建设:技术能力,文化力,凝聚力,影响力,团队成长几点建议:提高物质激励的额度,如分享一次500元,年终评选上优秀分享......
  • AssemblyAI融资3000万美元!3人团队,想用AI改变语音市场
     视学算法报道  编辑:桃子【导读】3人团队如何用AI改变语音市场?​三人打下的专注语音技术独角兽,如今又成功融资了。前段时间,美国音频API平台AssemblyAI完成了3000万美元......
  • 初探c语言第一天
    1.库函数和用户函数​库函数用户函数需要自己根据需要设定()中放置变量2.存放变量和常量需要定义inta=变量  constintA=常量​​3.scanf一定要打&     ......
  • #冲刺创作新星#一起学做鸿蒙“羊了个羊”
    简介最近大火了一个小游戏火遍朋友圈,我们就一起看看如何能用OpenHarmony学习做个”羊了个羊“。本文中引用的图片资源均来自:https://github.com/Jetereting/ylgy。开发......
  • 任正非:不懂三高、不抓三快、不盯三好,你拿什么带出狼性团队!
    任正非说:“企业最基本的使命就是活下去”。在残酷的市场竞争中,要想活下去,离不开狼性精神!华为的狼性文化是很成功的,任正非曾经说:“因为狼有让自己活下去的三大特性:一是敏锐的......
  • C语言每日一题——第一天
    第一天小明想要给他的朋友写一个生日祝福程序,在运行时,会根据输入的日期输出不同的结果。若在平时运行程序(例如9月28日):09-28:+3?-15而在朋友生日(12月13日)当天:12-13......