php抓取网页数据插入数据库(搜狗微信公众号简七指数怎么获取和点赞量?)
优采云 发布时间: 2022-04-03 06:01php抓取网页数据插入数据库(搜狗微信公众号简七指数怎么获取和点赞量?)
微信公众平台有很多公众号,里面有各种各样的文章,很多都是乱七八糟的。不过,在这些文章之中,肯定会有一些我认为优秀的文章。
所以如果我可以自己写一个程序来获取我喜欢的微信公众号上的文章,获取文章的浏览量和点赞数,然后进行简单的数据分析,那么< @文章 肯定会是一个更好的 文章。
这里需要注意的是,通过编写爬虫获取搜狗微信搜索中的微信文章,是无法获取浏览量和点赞这两个关键数据的(我是入门级编程技能)。于是我找到了另一种方式,通过青波指数的网站获取我想要的数据。
注:目前已找到方法获取搜狗微信中文章的浏览量和点赞量。2017.02.03
事实上,清波指数网站上的数据是非常完整的。可以看到微信公众号的列表,也可以看到每日、每周、每月的热文,不过我上面说的,内容比较乱,那些看书多的文章可能是< @文章 一些家长级别的人会喜欢的。
当然我也可以在这个网站上搜索具体的微信公众号,然后看看它的历史文章。清博指数也已经很详细了,可以按照阅读数、点赞数等进行排序文章。但是,我需要的可能是一个很简单的点赞数除以阅读数的指标,所以我需要通过爬虫抓取上面的数据,进行简单的分析。对了,可以练手,无聊慌。
启动程序
以微信公众号健奇财经为例,我需要先打开它的文章界面,下面是它的url:
然后通过分析发现一共有25页文章,也就是最后一页文章的url如下,注意只有最后一个参数不同:
所以你可以编写一个函数并调用它 25 次。
BeautifulSoup 在网络上爬取它需要的数据
忘了说,我写程序用的语言是Python,它的爬虫入口很简单。然后BeautifulSoup是一个网页分析插件,非常方便的获取文章中的HTML数据。
下一步是分析网页的结构:
我用红框文章框住了两篇文章,它们在网页上的结构代码是一样的。然后通过检查元素就可以看到网页对应的代码,然后就可以编写爬取的规则了。下面我直接写一个函数:
# 从网页中获取数据
def get_webdata(url):
标题 = {
'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.内容
b = 美丽汤(c)
data_list = b.find('ul',{'class':'article-ul'})
data_li = data_list.findAll('li')
对于 data_li 中的 i:
# 替换标题中的英文双引号,防止插入数据库时出错
title = i.find('h4').find('a').get_text().replace('"','\'\'')
链接 = 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)
赞美数 = int(i.find('i',{'class':'fa-thumbs-o-up'}).next_sibling)
insert_content(标题,readnum,praisenum,时间,链接,来源)
这个函数包括使用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):
对于范围内的 i(1,range_num+1):
url = basic_url + str(i)
打印网址
打印 ''
获取网络数据(网址)
time.sleep(round(random.random(),1))
basic_url = '#39;
get_urls_webdatas(basic_url,25)
如上代码,get_urls_webdataas函数传入两个参数,分别是基本url和需要的页数。你可以看到我在代码的最后一行调用了这个函数。
这个函数也调用了我上面写的函数get_webdata来抓取页面,这样25个页面的文章数据会一次性写入数据库。
然后注意这个小技巧:
time.sleep(round(random.random(),1))
每次我用程序爬一个网页,这个语句会随机生成一个1s以内的时间段,然后休息这么短的时间,然后继续爬下一个页面,可以防止被ban。
获取最终数据
先给出我这次写的其余代码:
#编码:utf-8
导入请求,MySQLdb,随机,时间
从 bs4 导入 BeautifulSoup
def get_conn():
conn = MySQLdb.connect('localhost','root','0000','weixin',charset='utf8')
返回连接
def insert_content(标题,readnum,praisenum,时间,链接,来源):
conn = get_conn()
cur = conn.cursor()
打印标题,readnum
sql = '插入weixin.gsdata(title,readnum,praisenum,time,link,source)值("%s","%s","%s","%s","%s", "%s")' % (title,readnum,praisenum,time,link,source)
cur.execute(sql)
mit()
cur.close()
conn.close()
包括一开始的一些插件的导入,然后剩下的两个函数就是与数据库操作相关的函数。
最后,通过从weixin.gsdata中选择*;在数据库中,我可以得到我抓取到的这个微信公众号的文章数据,包括标题、发布日期、阅读量、点赞数、访问url等信息。
分析数据
这些数据只是最原创的数据。我可以将以上数据导入Excel,进行简单的分析处理,得到我需要的文章列表。分析思路如下:
我可以按喜欢排序