爬虫爬取博客园发布内容(软件工程归档作业)
建民老师让我们完成这一学期的归档,我觉得一个一个做太繁琐了,而且很耽误时间,我宝贵的复习时间被浪费了一整天。
希望铁大21级,22级的小学弟学妹们能够用我这个代码完成归档作业,多一些娱乐时间。
本代码借鉴了韩佳作学长的python爬虫,韩学长简直是我的男神。
再次感谢韩学长。
接下来是excel的归档:
`
-- codeing = utf-8 --
import requests, xlwt
from bs4 import BeautifulSoup
import urllib.request
url_list1 = [] # 用于存放标题和url
url_list2 = [] #用于存放日期
url_list3 = [] #用于存放详情界面
获取源码
def get_content(url):
html = requests.get(url).content
return html
获取列表页中的所有博客url,标题,链接,日期;
def get_url(html):
soup = BeautifulSoup(html, 'lxml') # lxml是解析方式,第三方库
blog_url_list1 = soup.find_all('div', class_='postTitle')
for i in blog_url_list1:
url_list1.append([i.find('a').text, i.find('a')['href']])
#获取列表日期,时间
blog_url_list2 = soup.find_all('div', class_='postDesc')
for i in blog_url_list2:
s = i.text[9:19]
# print(s)
url_list2.append(s)
开始爬取
for page in range(1, 11): #定义要爬取的页面数
url = 'http://www.cnblogs.com/jiankaitianmen/default.html?page={}'.format(page)
# print(url)
get_url(get_content(url))
详情页中内容进行分步爬取
lens = len(url_list1)
for j in range(0, lens):
url=url_list1[j][1]
req=urllib.request.Request(url)
resp=urllib.request.urlopen(req)
html_page=resp.read().decode('utf-8')
soup=BeautifulSoup(html_page,'html.parser')
print(soup.prettify())
div=soup.find(id="cnblogs_post_body")
url_list3.append([div.get_text()])
newTable = '吴则昊.xls' #生成的excel名称
wb = xlwt.Workbook(encoding='utf-8') # 打开对象
ws = wb.add_sheet('blog') # 添加一个sheet
headData = ['博客标题', '链接','时间','详细内容']
写标题
for colnum in range(0, 4): #定义的四列名称
ws.write(0, colnum, headData[colnum], xlwt.easyxf('font:bold on')) # 第0行的第colnum列写入数据headDtata[colnum],就是表头,加粗
index = 1
lens = len(url_list1)
print(len(url_list1),len(url_list2))
print(url_list2)
for j in range(0, lens):
ws.write(index, 0, url_list1[j][0])
ws.write(index, 1, url_list1[j][1])
ws.write(index, 2, url_list2[j])
ws.write(index, 3, url_list3[j][0])
index += 1
wb.save(newTable) # 保存
`
在excel基础上可以进行word的归档:
先创建一个word文档,命名为博客标题.dotx,作为模板。
这个模板我们在上面插入书签,为插入的位置做标记。
在书签里面命名(为了找到插入的位置)
运行下面的代码:
`
import os
from win32com.client import Dispatch
from datetime import datetime
zpath = os.getcwd() + '\'
app = Dispatch('Word.Application')
xlApp = Dispatch("Excel.Application")
xlBook = xlApp.Workbooks.Open(zpath + '吴则昊.xls')
now_date = '2021-6-2415:23:29'
for i in range(100):
name = xlBook.Worksheets('blog').Cells(i + 2, 1).Value
line = str(xlBook.Worksheets('blog').Cells(i + 2, 2).Value)
time = str(xlBook.Worksheets('blog').Cells(i + 2, 3).Value)
content = str(xlBook.Worksheets('blog').Cells(i + 2, 4).Value)
print(name, line, time, content)
doc = app.Documents.Add(zpath + '博客标题.dotx')
doc.Bookmarks("name").Range.Text = name
doc.Bookmarks("line").Range.Text = line
doc.Bookmarks("time").Range.Text = time
doc.Bookmarks("content").Range.Text = content
st = datetime.strptime(now_date,'%Y-%m-%d%H:%M:%S')
print(st)
doc.SaveAs(
zpath + ' 20203284 吴则昊 '+str(i)+'.doc')
print(i)
app.Documents.Close()
app.Quit()
xlBook.Close()
xlApp.Quit()
print("运行结束!!")
`
他会自动保存在文件夹下面。
期间还有建强桑的帮忙,强桑雀氏猛
希望能给学弟学妹发挥点作用!