最终的效果
废话不多少,直接上图
这里可以清楚的看到,数据库里包含了日期,内容,和网站link
下面我们来分析怎么实现
使用的库
1
2
3
4
5
|
import requests from selenium.webdriver import chrome, chromeoptions import time from sqlalchemy import create_engine import pandas as pd |
目标分析
这是微博热搜的link:https://s.weibo.com/top/summary
首先我们使用selenium对目标网页进行请求
然后我们使用xpath对网页元素进行定位,遍历获得所有数据
然后使用pandas生成一个dataframe对像,直接存入数据库
一:得到数据
我们看到,使用xpath可以得到51条数据,这就是各热搜,从中我们可以拿到链接和标题内容
1
2
3
|
all = browser.find_elements_by_xpath( '//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[2]/a' ) #得到所有数据 context = [i.text for i in c] # 得到标题内容 links = [i.get_attribute( 'href' ) for i in c] # 得到link |
然后我们再使用zip函数,将date,context,links合并
zip函数是将几个列表合成一个列表,并且按index对分列表的数据合并成一个元组,这个可以生产pandas对象。
1
2
|
dc = zip (dates, context, links) pdf = pd.dataframe(dc, columns = [ 'date' , 'hotsearch' , 'link' ]) |
其中date可以使用time模块获得
二:链接数据库
这个很容易
1
2
|
enging = create_engine( "mysql+pymysql://root:123456@localhost:3306/webo?charset=utf8" ) pdf.to_sql(name = 'infromation' , con = enging, if_exists = "append" ) |
总代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
from selenium.webdriver import chrome, chromeoptions import time from sqlalchemy import create_engine import pandas as pd def get_data(): url = r "https://s.weibo.com/top/summary" # 微博的地址 option = chromeoptions() option.add_argument( '--headless' ) option.add_argument( "--no-sandbox" ) browser = chrome(options = option) browser.get(url) all = browser.find_elements_by_xpath( '//*[@id="pl_top_realtimehot"]/table/tbody/tr/td[2]/a' ) context = [i.text for i in all ] links = [i.get_attribute( 'href' ) for i in all ] date = time.strftime( "%y-%m-%d-%h_%m_%s" , time.localtime()) dates = [] for i in range ( len (context)): dates.append(date) # print(len(dates),len(context),dates,context) dc = zip (dates, context, links) pdf = pd.dataframe(dc, columns = [ 'date' , 'hotsearch' , 'link' ]) # pdf.to_sql(name=in, con=enging, if_exists="append") return pdf def w_mysql(pdf): try : enging = create_engine( "mysql+pymysql://root:123456@localhost:3306/webo?charset=utf8" ) pdf.to_sql(name = 'infromation' , con = enging, if_exists = "append" ) except : print ( '出错了' ) if __name__ = = '__main__' : xx = get_data() w_mysql(xx) |
到此这篇关于python+selenium爬取微博热搜存入mysql的实现方法的文章就介绍到这了,更多相关python selenium爬取微博热搜存入mysql内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/wqeWED/article/details/113186957