1、技术概述

爬虫,就是给网站发起请求,并从响应中提取需要的数据的自动化程序,一般有三个步骤:

(1)发起请求,获取响应

(2)解析内容

(3)保存数据

当初学习该技术是因为要做疫情网页,需要准确的疫情数据。

技术难点:或许需要去了解一下爬虫的字典和列表。

2、技术详述

仅到爬取数据并存储数据到数据库阶段,需要安装Python 3.6,MySQL,Jupyte notebook(Python IDE)(安装方法自己百度),启动jupyter notebook(基础使用教程请自己百度,很简单的)

发起请求,获取响应

不少网站有反扒措施,为了避免这个,我们可以冒充各种搜索引擎去爬取,比如百度,谷歌。

输入百度网址www.baidu.com,按下F12进入开发者页面(不同浏览器间可能不同),如图找到百度的User-Agent数据,这个数据用来标识访问者身份,这个就是咱们冒充百度的关键

有两种发起请求的方式,其一是用urllib,主要用的是其中的request.urlopen()方法

from urllib import request

url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" #这是你想爬取数据的地址

header = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"

} #就是上一点中得到的那个User-Agent,这一步我们冒充成百度

req = request.Request(url,headers = header)

res = request.urlopen(req) #访问url并获取响应

html = res.read()#获取的是字节形式的内容

html.decode("utf-8")#解码,如果是乱码的话

print(html)

运行结果:

第二种是使用requests发送请求

这里要注意:如果是以前没有装过requests库的话,要在命令行安装一下:pip install requests,主要用到的命令是requests.get()

import requests

url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" #这是你想爬取数据的地址

header = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"

}

r1 = requests.get(url,headers = header)#发起请求

r1.encoding = "UTF-8"

html = r1.text

print(html)

可以看出代码和用urllib的没太大区别,运行后结果一样的,就不贴图了

3. 解析内容

解析内容也有两种方式,一种是beautifulsoup4,beautifulsoup4将复杂的HTML文档转化成一个树状结构,每个节点都是Python的对象,find(),select(),find_all()函数获取标签。安装命令:pip install beautifulsoup4

import requests

from bs4 import BeautifulSoup #别忘了导入库啊

url = "http://wjw.fujian.gov.cn/xxgk/gsgg/yqgg/202005/t20200520_5270636.htm" #这是你想爬取数据的地址,例子是福建卫健委4月法定报告传染病疫情报告,不再是数据整理好的接口了

header = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"

}

r1 = requests.get(url,headers = header)#发起请求

r1.encoding = "UTF-8"

#r1.text

html = r1.text

#BeautifulSoup(html)#整理了数据,想要的数据可以整理后一个个去找,更方便的是去你想爬取数据的网站打开F12开发者工具,左上角有个选择元素,可以直接在网页上定位标签

soup = BeautifulSoup(html)

#soup.find("font").text #可以拿到font标签里的文本,如果是.attrs则可以拿到标签属性,若只有soup.find("font"),则是整个标签+内容,怎么得到你要找的数据需要好好找找资料,如果用find()得到的是第一个符合的标签,find_all得到的是所有符合条件的标签

res=soup.find("font")

print(res)

print(res.text)

print(res.attrs)

先看看未解析内容前的效果(运行到r1.text命令):

解析后效果(运行到BeautifulSoup(html)命令):

soup.find("font")\soup.find("font").text\soup.find("font").attrs三个运行结果:

另一种是re,要对正则表达式有一定理解

当初是从腾讯接口爬取疫情数据,数据持久化在本地数据库,完整代码(仅显示爬虫爬取数据部分,不包括数据库):

import requests

import json

import pymysql

import time

import traceback

def getdata():#从腾讯接口爬取数据,并存到字典及列表中

url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"

header = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"

}

r1 = requests.get(url,headers = header)

res1 = json.loads(r1.text)

data_all = json.loads(res1["data"])

url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"

r2 = requests.get(url2,headers = header)

res2 = json.loads(r2.text)

odata_all = json.loads(res2["data"])

country_history = {}#历史数据,全国

for i in odata_all["chinaDayList"]:

ds ="2020."+ i["date"]

tup =time.strptime(ds,"%Y.%m.%d")

ds =time.strftime("%Y-%m-%d",tup)

confirm =i["confirm"]

heal=i["heal"]

dead=i["dead"]

country_history[ds] ={"confirm":confirm, "heal":heal, "dead":dead}

for i in odata_all["chinaDayAddList"]:

ds ="2020."+ i["date"]

tup =time.strptime(ds,"%Y.%m.%d")

ds =time.strftime("%Y-%m-%d",tup)

confirm =i["confirm"]

country_history[ds].update({"confirm_add":confirm})

details =[]#各省数据

update_time=data_all["lastUpdateTime"]

data_province=data_all["areaTree"][0]["children"]

for pro_infos in data_province:

province=pro_infos["name"]

confirm=pro_infos["total"]["confirm"]

confirm_add=pro_infos["today"]["confirm"]

heal=pro_infos["total"]["heal"]

dead=pro_infos["total"]["dead"]

details.append([update_time,province,confirm,confirm_add,heal,dead])

country_now =[]#全国如今数据

update_time =data_all["lastUpdateTime"]

nowConfirm =data_all["chinaTotal"]["nowConfirm"]

suspect =data_all["chinaTotal"]["suspect"]

nowSevere =data_all["chinaTotal"]["nowSevere"]

confirm =data_all["chinaTotal"]["confirm"]

heal =data_all["chinaTotal"]["heal"]

dead =data_all["chinaTotal"]["dead"]

nowConfirm_add =data_all["chinaAdd"]["nowConfirm"]

suspect_add =data_all["chinaAdd"]["suspect"]

nowSevere_add =data_all["chinaAdd"]["nowSevere"]

confirm_add =data_all["chinaAdd"]["confirm"]

heal_add =data_all["chinaAdd"]["heal"]

dead_add =data_all["chinaAdd"]["dead"]

country_now.append([update_time,nowConfirm,suspect,nowSevere,confirm,heal,dead,nowConfirm_add,suspect_add,nowSevere_add,confirm_add,heal_add,dead_add])

province_history = []#历史数据,各省

ds=time.strftime("%Y-%m-%d")

data_province=data_all["areaTree"][0]["children"]

for pro_infos in data_province:

province=pro_infos["name"]

confirm=pro_infos["total"]["confirm"]

confirm_add=pro_infos["today"]["confirm"]

heal=pro_infos["total"]["heal"]

dead=pro_infos["total"]["dead"]

province_history.append([ds,province,confirm,confirm_add,heal,dead])

return country_history,details,country_now,province_history

保存数据

上一步已经得到爬取数据,并把它们暂时放在列表和字典里,那么爬取的数据要怎么存储进本地数据库呢?

下面是其中一个更新details表的例子,其它大同小异。

def get_conn():#把常用的函数封装,打开关闭数据库链接

conn=pymysql.connect(host="localhost",

user="root",

password="123456",

db="covtest",

charset="utf8")

cursor=conn.cursor()

return conn,cursor

def close_conn(conn,cursor):

if cursor:

cursor.close()

if conn:

conn.close()

def update_details():#更新details表,因为用了insert命令,所以取出时必须判断最新时间为最新数据

cursor=None

conn=None

try:

li=getdata()[1]

conn,cursor=get_conn()

sql ="insert into details(update_time,province,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s)"

sql_query='select %s=(select update_time from details order by id desc limit 1)'

cursor.execute(sql_query,li[0][0])

if not cursor.fetchone()[0]:

print(f"{time.asctime()}开始更新最新数据")

for item in li:

cursor.execute(sql,item)

conn.commit()

print(f"{time.asctime()}更新最新数据完毕")

else:

print(f"{time.asctime()}已是最新数据!")

except:

traceback.print_exc()

finally:

close_conn(conn,cursor)

3、技术使用中遇到的问题和解决过程

1.notebook下载超时

2.如图

4、进行总结。

步骤:

1)发起请求,获取响应(urllib、requests)

2)解析内容(re、beautifulsoup4)

3)保存数据(保存在本地库或云数据库)

5、列出参考文献、参考博客(标题、作者、链接)。

python爬取内容_Python爬取数据(基础,从0开始)相关推荐

  1. python 图片识别服装_Python爬取某东羽绒服数据,用可视化帮你挑选心仪的衣服...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章附带菜J学Python ,作者J哥 刚接触Python的新手.小白,可以复制下面的链接去免 ...

  2. python b站 排行_Python 爬取B站 视频热度排行数据

    时间:2019-03-07 概述:抓取数据 爬虫 采集 Python 爬取bilibili站 视频热度排行视频数据,有文件为 bilibili.py,只需输入一个大模块名,如游戏模块名为'game', ...

  3. python二手房价格预测_Python爬取赶集网北京二手房数据R对爬取的二手房房价做线性回归分析...

    前言:本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的二手房房价做线性回归分析.文章思路清晰,代码详细,特别适合刚刚接触Python&R的同学学习参考. Part1 ...

  4. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析

    上一次分享了使用matplotlib对爬取的豆瓣书籍排行榜进行分析,但是发现python本身自带的这个绘图分析库还是有一些局限,绘图不够美观等,在网上搜索了一波,发现现在有很多的支持python的绘图 ...

  5. python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  6. 清除string内容_python爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来...

    转载:03 爬虫实例-获取网页弹幕内容 思路: 向哔哩哔哩网站发送请求 请求成功后,解析爬取的弹幕内容保存到一个文件中 读取文件并分析弹幕内容中词组或文字出现的频率 将这些词组或文字组成五角星图形 组 ...

  7. python爬新闻动态_Python爬取新闻动态评论

    四年前的文章了,现在才看见没通过....当初明明过了的... 1.前些天打开网易新闻,于是点开爬取该新闻的评论. 2.以前爬取的网页都是静态的,都是源代码中直接就有,一眼就可以观察到的,而这次打开却不 ...

  8. python微博爬虫分析_python爬取和分析新浪微博(一):scrapy构建新浪微博榜单、博主及微博信息爬虫...

    1. 爬虫项目介绍 爬虫首先基于python scrapy 框架,使用了随机用户代理和IP代理等反爬技巧,将爬取到的微博领域数据,各领域榜单博主信息和博主的微博信息分别存入的mysql数据库对应的表格 ...

  9. python爬取流浪地球_python爬取《流浪地球》获十几万评论点赞,超给力!

    原标题:python爬取<流浪地球>获十几万评论点赞,超给力! 我自己到现在其实还没看这部电影,毕竟这电影这么火,电影院现在都很难买到好的位置.所以我打算不如先看看大家是怎么评价这部电影的 ...

最新文章

  1. SQLServer2000 数据库恢复模型详解
  2. PHP Notice: undefined index 解决方法
  3. java 数据 权限_Java如何利用Mybatis进行数据权限控制详解
  4. [原]那些年整理的Linux常用命令,简单明了
  5. shell读取php 数组长度,shell数组的定义、数组长度
  6. http2.0和http1.1的区别
  7. 字符常量参加表达式运算
  8. 蒸汽管道图纸符号_供热循环系统“30问”(附管网图常见符号图例)
  9. 如何把视频压缩到最小?请看详细步骤
  10. 硬盘分区工具找不到硬盘该怎么办
  11. TypesScript + Nodejs + Express + Mongoose 实现 RESTful API 实战视频教程(33 个视频)
  12. 材料研究生转行,可以做哪些准备规划
  13. php花朵飘落特效,【新年气象】WordPress 主题添加花瓣飘落特效
  14. python的IDLE打不开如何解决
  15. 计算机应用好中吗小木虫,[计算机软件及应用]小木虫 Origin 使用问题集锦.doc
  16. Win10如何自定义右键菜单-修改注册表(图文)
  17. CSDN专属idea插件上线啦~~
  18. 他的成功不可复制——听洪小文讲座有感
  19. 基于html+css+javascript+jquery制作北京景点介绍7页 WEB静态旅游景点区主题网页设计与制作
  20. axure 转换为html,AxureRP教程AxureRP如何生成HTML文件

热门文章

  1. [论文阅读](图像/视频质量评价系列)
  2. 【现控理论】(一、系统的传递函数矩阵)----学习笔记
  3. 针对运行JSP文件后网页自动下载的解决办法
  4. 求最长上升子序列——LIS的O(nlogn)算法(二分)
  5. 大型桥梁结构健康监测系统之GNSS位移监测系统
  6. 美国电气与计算机工程专业排名,美国电气与计算机工程专业排名怎么样?美国电气与计算机工程专业大学推荐...
  7. 重装 Mac 系统后的安装软件和个人配置[个人习惯]
  8. 2021编程语言排行榜出炉,C#年度语言奖
  9. Word中令人头疼的字体转换
  10. android蓝牙查看电池容量_Android获取电池电量和电池容量