querylist采集微信公众号文章(搜狗微信搜索中的微信文章获取文章的浏览量和点赞量)
优采云 发布时间: 2021-12-25 16:09querylist采集微信公众号文章(搜狗微信搜索中的微信文章获取文章的浏览量和点赞量)
在线工具:微信文章转PDF
微信公众平台上有很多公众号,里面有各种各样的文章,很多很乱。但是,在这些文章中,肯定会有我认为的精品文章。
所以如果我能写一个程序来获取我喜欢的微信公众号上的文章,获取文章的浏览量和点赞数,然后进行简单的数据分析,那么最终的文章列表肯定会是成为更好的文章。
这里需要注意的是,通过写爬虫在搜狗微信搜索中获取微信文章,是无法获取到浏览量和点赞这两个关键数据的(我是编程入门级的)。所以我采取了不同的方法,通过清博指数网站,来获取我想要的数据。
注:目前我们已经找到了获取搜狗微信文章浏览量和点赞数的方法。2017.02.03
事实上,清博指数网站上的数据是非常完整的。可以查看微信公众号列表,可以查看每日、每周、每月的热门帖子。但正如我上面所说,内容相当混乱。阅读量大的文章可能是一些家长级人才会喜欢的文章。
当然,我也可以在这个网站上搜索特定的微信公众号,然后阅读它的历史文章。青博索引也很详细,文章可以按照阅读数、点赞数等排序。但是,我需要的可能是一个很简单的点赞数除以阅读数的指标,所以需要通过爬虫爬取以上数据进行简单的分析。顺便说一句,你可以练习你的手,感觉很无聊。
启动程序
以建起财经微信公众号为例,我需要先打开它的文章界面,下面是它的url:
http://www.gsdata.cn/query/article?q=jane7ducai&post_time=0&sort=-3&date=&search_field=4&page=1
然后我通过分析发现它总共有25页文章,也就是文章最后一页的url如下,注意只有last参数不同:
http://www.gsdata.cn/query/article?q=jane7ducai&post_time=0&sort=-3&date=&search_field=4&page=25
所以你可以编写一个函数并调用它 25 次。
BeautifulSoup 爬取你在网络上需要的数据
忘了说了,我写程序用的语言是Python,爬虫入口很简单。那么BeautifulSoup就是一个网页分析插件,非常方便的获取文章中的HTML数据。
下一步是分析网页结构:
我用红框框了两篇文章,它们在网页上的结构代码是一样的。然后我可以通过查看元素看到网页的相应代码,然后我可以编写抓取规则。下面我直接写了一个函数:
# 获取网页中的数据
def get_webdata(url):
headers = {
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
}
r = requests.get(url,headers=headers)
c = r.content
b = BeautifulSoup(c)
data_list = b.find('ul',{'class':'article-ul'})
data_li = data_list.findAll('li')
for i in data_li:
# 替换标题中的英文双引号,防止插入数据库时出现错误
title = i.find('h4').find('a').get_text().replace('"','\'\'')
link = i.find('h4').find('a').attrs['href']
source = i.find('span',{'class':'blue'}).get_text()
time = i.find('span',{'class':'blue'}).parent.next_sibling.next_sibling.get_text().replace('发布时间:'.decode('utf-8'),'')
readnum = int(i.find('i',{'class':'fa-book'}).next_sibling)
praisenum = int(i.find('i',{'class':'fa-thumbs-o-up'}).next_sibling)
insert_content(title,readnum,praisenum,time,link,source)
这个函数包括先使用requests获取网页的内容,然后传递给BeautifulSoup分析提取我需要的数据,然后通过insert_content函数在数据库中,这次就不涉及数据库的知识了,所有的代码都会在下面给出,也算是怕以后忘记了。
我个人认为,其实BeautifulSoup的知识点只需要掌握我在上面代码中用到的几个常用语句,比如find、findAll、get_text()、attrs['src']等等。
循环获取并写入数据库
你还记得第一个网址吗?总共需要爬取25个页面。这25个页面的url其实和最后一个参数是不一样的,所以你可以给出一个基本的url,使用for函数直接生成25个url。而已:
# 生成需要爬取的网页链接且进行爬取
def get_urls_webdatas(basic_url,range_num):
for i in range(1,range_num+1):
url = basic_url + str(i)
print url
print ''
get_webdata(url)
time.sleep(round(random.random(),1))
basic_url = 'http://www.gsdata.cn/query/article?q=jane7ducai&post_time=0&sort=-3&date=&search_field=4&page='
get_urls_webdatas(basic_url,25)
和上面的代码一样,函数get_urls_webdataas传入了两个参数,分别是基本url和需要的页数。你可以看到我在代码的最后一行调用了这个函数。
这个函数还调用了我写的函数get_webdata来抓取上面的页面,这样25页的文章数据就会一次性写入数据库。
那么请注意这个小技巧:
time.sleep(round(random.random(),1))
每次使用程序爬取一个网页,这个语句都会在1s内随机生成一段时间,然后休息这么一小段时间,然后继续爬下一个页面,可以防止被ban。
获取最终数据
先把程序的剩余代码给我:
#coding:utf-8
import requests,MySQLdb,random,time
from bs4 import BeautifulSoup
def get_conn():
conn = MySQLdb.connect('localhost','root','0000','weixin',charset='utf8')
return conn
def insert_content(title,readnum,praisenum,time,link,source):
conn = get_conn()
cur = conn.cursor()
print title,readnum
sql = 'insert into weixin.gsdata(title,readnum,praisenum,time,link,source) values ("%s","%s","%s","%s","%s","%s")' % (title,readnum,praisenum,time,link,source)
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
在导入的开头收录
一些插件,然后剩下的两个功能是与数据库操作相关的功能。
最后,通过从weixin.gsdata中选择*;在数据库中,我可以获取到我抓取到的这个微信公众号的文章数据,包括标题、发布日期、阅读量、点赞、访问网址等信息。
分析数据
这些数据只是最原创
的数据。我可以把上面的数据导入到Excel中进行简单的分析处理,然后就可以得到我需要的文章列表了。分析思路如下:
我喜欢的微信公众号只有几个。我可以用这个程序抓取我喜欢的微信公众号上的所有文章。如果我愿意,我可以进一步筛选出更多高质量的文章。
程序很简单,但是一个简单的程序就可以实现生活中的一些想法,是不是一件很美妙的事情。