如何利用Python爬虫爬取博主的全部文章的标题,文章标题的URL。可根据阅读量进行降序输出!

编程入门 行业动态 更新时间:2024-10-24 08:21:57

如何利用Python爬虫爬取博主的全部文章的<a href=https://www.elefans.com/category/jswz/34/1771440.html style=标题,文章标题的URL。可根据阅读量进行降序输出!"/>

如何利用Python爬虫爬取博主的全部文章的标题,文章标题的URL。可根据阅读量进行降序输出!

步履艰辛呀!自己不会做网络爬虫,只好去找教程例子!
当然自己也是有点小基础的!只是会读取简单的HTML网页代码!
对于这么复杂的代码,驾驭不住呦~
多个代码类型。我会分别列取出来的。
如果是代码的原作者,看到请联系我。我会标明来源地址的!
前言:
但是无论是谁的主页,都会出现这个人的主页。
已经有好多人都爬取到啦!
我爬取的所有链接的部分链接

但是,这个链接:
是不存在的。只能访问他的主页!就看到下面这个文章啦!

下面来说说我的历程吧!
依照我历程顺序的三个爬虫实例:

  1. 爬取所有文章的标题,以及文章的阅读量,还有文章的阅读量总和!
  2. 不区分原创还是转载。爬取所有文章的链接
  3. 区分原创还是转载。爬取所有文章的链接

好,接下来直接上源代码:

1,爬取所有文章的标题,以及文章的阅读量,还有文章的阅读量总和!
但是统计数量会出错误!

import requests
import re
sum = 0
pages = 9
x = 1
nn = []
base_url = "/"
for x in range(pages):r = requests.get(base_url+str(x+1))titles = re.findall(r'<span class="article-type type-.*?">\n.*?</span>\n(.*?)</a>', r.content.decode(), re.MULTILINE)visits = re.findall( r'<span class="read-num">阅读数:(.*?)</span>', r.content.decode())nn.append(visits)nn = [int(x) for x in visits] #将阅读数转换为数字mm = nn[1:-1]for x, y in zip(titles, mm): #文章与阅读数组合if y<100:print(x, ": ",y)sum += y
print(sum)
print(visits)
print(mm)

代码截图:

运行结果:

我的访问量:62921

但是阅读量出现错误啦!因为开头说的那个文章啦。所以就错位了。
还有,访问量是大于阅读量的!
因为:访问量=别人访问你主页次数+阅读文章次数总和!
所以这个可以大概看一下吧!不是完美的!

2,不区分原创还是转载。爬取所有文章的链接
但是,不能区分原创,还是转载!
这个历程,也让我收获了一个志同道合的好友。
下面的那个代码也是这个代码的作者写的!
代码:

import urllib.request
from bs4 import BeautifulSoup
#如果没有安装好BeautifulSoup,这里是会报错的#自定义一个函数拿到博客的链接
def getUrl (url):#定义一个headers,存储刚才复制下来的报头,模拟成浏览器headers = ('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win32; x32; rv:48.0) Gucko/20130101 Firefox/58.0")opener = urllib.request.build_opener()opener.addheaders = [headers]# 将opener安装为全局urllib.request.install_opener(opener)html = urllib.request.urlopen(url).read().decode('utf-8', 'ignore')bs = BeautifulSoup(html,'html.parser')# 用beautifulsoup的select,找到所有的<a>标签pages = bs.select(".pagination-box")if pages:# 判断是否包含下一页的选项# 用beautifulsoup的select,找到所有的<a>标签links = bs.select('.article-list > .article-item-box > h4 > a')return linkselse:sys.exit()# 要爬取的网页链接
import  sys
if __name__ == '__main__':count = 0base_url = ''# 要爬取的网页链接 ,循环足够多的页数,所以填了1000000for i in range(1,10):#=ViewCounturl = base_url+'/article/list/'+str(i)+'?orderby=ViewCount'# 获取对应网页的链接地址linklist = getUrl(url)# 定义一个列表texts存储文章的标题texts = []# 定义一个列表links存储文章的链接links = []# 遍历linkllist,存储标题和链接for link in linklist:texts.append(link.text.strip())links.append(link.get('href'))#    通过zip,将信息输出到控制台print('\n')for text, link in zip(texts, links):text = text.strip().replace("原        \n        ", "")text = text.strip().replace("转        \n        ", "")data = {text,link}ff = open('原创_文章标题.txt','a')if count%10 ==0:ff.write(str(count)+text+'\n\n')else:ff.write(str(count)+text+'\n')ff.close()ff = open('原创_链接.txt','a')ff.write(link+'\n')ff.close()count+=1;print("成功! 有",count,'个完成!')#print(data)
#ff.close()

自己添加了一些写入的文件的操作:
跟爬虫有知识不同!
这个知识可以自行百度,挺简单的。
我的是在爬虫所在路径之下建立的文本文件,名字写入!
必须在同一个路径之下!才可以打开进行写入!

就是打开记事本,写入,关闭!
我的写入用的是追加手法!不会覆盖!

 ff = open('原创_文章标题.txt','a')if count%10 ==0:ff.write(str(count)+text+'\n\n')else:ff.write(str(count)+text+'\n')ff.close()ff = open('原创_链接.txt','a')ff.write(link+'\n')ff.close()count+=1;print("成功! 有",count,'个完成!')

代码截图(一页放不下,两页来放呗!):

运行结果截图:

文本截图:

但是,还有待优化!
我与原作者进行了联系!进行了交流~
下面就是目前最优化的版本啦!

3,区分原创还是转载。爬取所有文章的链接
但是,阅读数和评论数不对。变量不能进行更新。
总是和第一篇文章(就是前面说的那个,每个人首页都会出现的!)一样!

这次优化,进行区分了原创,转载,阅读数(未成功),评论数(未成功)
总体代码,没有进行改变。就是改变了一下链接

链接地址:

=1

我又进行了一些改变,可以进行顺序控制!

这个是第三页!
链接地址:

=1&orderby=ViewCount

完整代码:

import requests
from bs4 import BeautifulSoupheader = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
}
def getOriginalArticle():'''获取原创文章'''for i in range(1,100):#=1&orderby=ViewCount#=ViewCount#url = base_url+'/article/list/'+str(i)+'?orderby=ViewCount'#url = '/{}/article/list/{}?t=1'.format(username,i)url = '/'+str(i)+'?t=1&orderby=ViewCount'web_data = requests.get(url, headers=header)soup = BeautifulSoup(web_data.content, 'lxml')pages = soup.select(".pagination-box")if pages:# 判断是否包含下一页的选项# 用beautifulsoup的select,找到所有的<a>标签links = soup.select('.article-list > .article-item-box > h4 > a')readnum = soup.select('.read-num')printOriginalData(links,readnum,'原        \n        ')else:# 结束循环breakdef getTranshipmentArticle(username):'''获取转载文章'''for i in range(1,100):url = '/{}/article/list/{}?t=2'.format(username,i)web_data = requests.get(url,headers=header)soup = BeautifulSoup(web_data.content, 'lxml')pages = soup.select(".pagination-box")links = soup.select('.article-list > .article-item-box > h4 > a')readnum = soup.select('.read-num')if pages:printTranshipmentData(links,readnum,'转        \n        ')else:# 这里可能会有问题,因为我的转载文章还不够分页的数量,所以需要添加多一条printTranshipmentData()printTranshipmentData(links, readnum, '转        \n        ')# 结束循环breakdef printTranshipmentData(links,readnum,stripText):global nfor link in links:url = link.get('href')title = link.text.strip().replace(stripText, "")read = readnum[0].text.strip("阅读数:")comment = readnum[1].text.strip("评论数:")data = {'url': url,'title': title,'readnum': read,'comment': comment}ff = open('转载_文章标题.txt','a')if n%10 == 0:#ff.write(str(n)+title+'阅读量:'+read+'评论数:'+comment+'\n\n')ff.write(str(n)+title+'\n\n')else:ff.write(str(n)+title+'\n\n')ff.close()ff = open('转载_链接.txt','a')ff.write(url+'\n')ff.close()n+=1;print("转载文章! 有",n,'个完成!')#print(data)def printOriginalData(links,readnum,stripText):global mfor link in links:url = link.get('href')title = link.text.strip().replace(stripText, "")read = readnum[0].text.strip("阅读数:")comment = readnum[1].text.strip("评论数:")data = {'url': url,'title': title,'readnum': read,'comment': comment}ff = open('原创_文章标题.txt','a')if m%10 == 0:ff.write(str(m)+title+'\n\n')else:ff.write(str(m)+title+'\n\n')ff.close()ff = open('原创_链接.txt','a')ff.write(url+'\n')ff.close()m+=1;print("原创文章! 有",m,'个完成!')#print(data)if __name__ == '__main__':username = "weixin_42859280"n = 0m = 0getTranshipmentArticle(username)print('\n\n------------------以下是原创文章--------------\n\n')getOriginalArticle()print('总文章数量:',n+m,'原创文章:',m,'篇! 转载文章:',n,'篇!')

代码截图(一页放不下三页来放!):
第一页:

第二页:

第三页:

先爬取得是转载的:
下图里面就是我说的不能实现的地方!
阅读量,评论数都是固定不变啦!

我也是进行了优化的!原来的文章没有依据排序输出功能!
我增加了进行降序输出!虽然在第二个里面就已经实现啦!
但是,目前也没有那么多时间功夫搞这个啦。
等以后我学学爬虫再搞吧!

哈哈,同时也感谢这位老哥帮助!
下面是他文章的链接,也就是我们最先相识的一个文章!


其他文章,好像就一篇。原博主看到记得联系我!
收获颇丰!

更多推荐

如何利用Python爬虫爬取博主的全部文章的标题,文章标题的URL。可根据阅读量进行降序输出!

本文发布于:2024-03-07 02:41:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716619.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:标题   爬虫   文章   可根据   降序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!