百家号爆文采集软件(老龄智能在百度百家号中搜索文章,爬取文章内容和相关信息)

优采云 发布时间: 2021-12-09 19:15

  百家号爆文采集软件(老龄智能在百度百家号中搜索文章,爬取文章内容和相关信息)

  需要

  使用“老化智能”在百度百家账号中搜索文章,抓取文章内容及相关信息。

  观察页面

  

  信息来源可以在红框中选择。我选择百家号是因为百家号聚合了多个平台的新闻报道。首先看看robots.txt,基本对爬虫没有限制。然后我找到网页的元素。我的想法是将上图搜索页面上每个文章的链接爬下来,然后放到列表中循环获取内容。这里我要说一下为什么选择百佳账号。, 因为得到不同文章的链接后,百家号文章页面的网页结构是一样的。

  

  您可以通过 Chrome 浏览器 F12 轻松找到 文章 链接。但是你也必须考虑翻页的问题。一般没有防爬网站。可以通过url实现翻页。

  https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=%E8%80%81%E9%BE%84%E6%99%BA%E8%83%BD&medium=2&x_bfe_rqs=20001&x_bfe_tjscore=0.000000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn=20

https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=%E8%80%81%E9%BE%84%E6%99%BA%E8%83%BD&medium=2&x_bfe_rqs=03E80&x_bfe_tjscore=0.000000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn=10

  以上分别是第三页和第二页的网址。显然,最后一个“pn=”后面的数字决定了页码,第一页显然是pn=0。现在您可以开始编写爬虫了。

  写代码

  先写部分获取文章链接。爬虫首先需要确认headers的内容。我在这里使用了用户代理和主机。我尝试过这个。对于百度来说,主机还是需要的。

  

  或者点击Chrome浏览器F12,点击网络中的东西,找到请求头,就可以找到我们需要的信息,把里面的user-agent和host复制到自己的代码中。

  import requests

from bs4 import BeautifulSoup

import sys

import time

from openpyxl import workbook

from openpyxl import load_workbook

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0',

'Host': 'www.baidu.com'

}

headers1 = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0',

'Host': 'baijiahao.baidu.com'

}

  导入库后,我这里定义了两个header,第一个是百度搜索页面使用的,第二个是爬百家账号时使用的文章。

  #获取百家号文章链接

def get_connect(link):

try:

r = requests.get(link, headers=headers, timeout=10)

if 200 != r.status_code:

return None

url_list = []

soup = BeautifulSoup(r.text, "lxml")

div_list = soup.find_all('div', class_='result-op c-container xpath-log new-pmd')

for div in div_list:

mu = div['mu'].strip()

url_list.append(mu)

print(mu)

return get_content(url_list)

except Exception as e:

print('e.message:\t', e)

finally:

print(u'go ahead!\n\n')

  这里定义了获取百家号链接的函数,即爬取百度搜索页面。只需使用 bs4 来解析网页。没有什么困难的。使用 try 异常做一个错误报告机制。

  #获取百家号内容

def get_content(url_list):

try:

for url in url_list:

clist=[] #空列表存储文章内容

r1 = requests.get(url,headers=headers1,timeout=10)

soup1 = BeautifulSoup(r1.text, "lxml")

s1 = soup1.select('.article-title > h2:nth-child(1)')

s2 = soup1.select('.date')

s3 = soup1.select('.author-name > a:nth-child(1)')

s4 = soup1.find_all('span',class_='bjh-p')

title = s1[0].get_text().strip()

date = s2[0].get_text().strip()

source = s3[0].get_text().strip()

for t4 in s4:

para = t4.get_text().strip() #获取文本后剔除两侧空格

content = para.replace('\n','') #剔除段落前后的换行符

clist.append(content)

content = ''.join('%s' %c for c in clist)

ws.append([title,date,source,content])

print([title,date])

wb.save('XXX.xlsx')

except Exception as e:

print("Error: ",e)

finally:

wb.save('XXX.xlsx') #保存已爬取的数据到excel

print(u'OK!\n\n')

  爬虫定位网页元素一般采用bs4常用的find方法、css选择器、xpath(使用soup.select方法)等路径。在firefox浏览器中,在F12中右击想要获取的元素,可以选择是使用CSS选择器还是xpath。

  #主函数

if __name__ == '__main__':

raw_url='https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=老龄智能&medium=2&x_bfe_rqs=20001&x_bfe_tjscore=0.000000&tngroupname=organic_news&newVideo=12&rsv_dl=news_b_pn&pn='

wb = workbook.Workbook() # 创建Excel对象

ws = wb.active # 获取当前正在操作的表对象

# 往表中写入标题行,以列表形式写入!

ws.append(['title','dt','source','content'])

#通过循环完成url翻页

for i in range(1000):

link=raw_url+str(i*10)

get_connect(link)

print('page',i+1)

#time.sleep(5)

wb.save('XXX.xlsx')

print('finished')

wb.close()

  最后编写main函数,使用for循环实现翻页操作。范围范围是 1000,这是我给我的头。根据实际情况,还是有必要的。

  实际效果

  

  就是这样!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线