python爬虫原理简析

本文介绍了Python爬虫的基本概念和工作流程,包括模拟浏览器发送请求、解析网页获取目标信息以及数据的存储方法。重点讲解了使用requests库发送请求,Beautifulsoup库解析HTML数据,以及数据存储至数据库或文件的常见方式。
摘要由CSDN通过智能技术生成

一、什么是爬虫?

学习爬虫前,我们首先要先了解一下爬虫的目的是什么?爬虫简单来说就是一个程序,这个程序会根据我们的设定,将网页上的目标内容获取并存储下来,供后续使用。

爬虫的工作过程跟我们自己上网搜索的过程类似,爬虫是一个“拟人”的操作

人力工作过程:浏览器发送请求(在搜索框输入内容并搜索)-- 服务器返回搜索结果 -- 肉眼筛选目标内容,通过复制或手动输入记录下来

爬虫工作过程:模拟浏览器发送请求 -- 服务器返回搜索结果 -- 下载网页内容 -- 解析网页内容并获取目标信息 -- 存放于数据库或文件中

二、爬虫工作流程

1、模拟浏览器发送请求、服务器返回搜索结果、下载网页内容

爬虫工作的前3个过程,在实际工作中是合并在一起处理的。我们会使用http库向目标站点发送一个Request,服务器能正常响应的话,会返回一个Response,下载这个Response,供后面进行我网页解析。

发送请求下载网页常用的2个工具,一个是python自带的基础模块 urllib,一个是第三方包 requests(如果没安装,先用pip install requests安装一下),示例代码如下:

#用urllib
from urllib import request

url='http://gz.ziroom.com/z/vr/61669497.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
req = request.Request(url, headers=headers)
urlhtml = request.urlopen(req) #请求打开网页

print(urlhtml.read().decode('utf-8')) #网页解码


#用requests
import requests

url='http://gz.ziroom.com/z/vr/61669497.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
urlhtml=requests.get(url, headers=headers)  #请求打开网页
#print(urlhtml)
urlhtml.encoding='utf-8'  #网页解码
print(urlhtml.text)  #读取网页

2、解析网页并获取目标信息

根据得到的数据类型不同,有不同的解析方法

html数据:正则表达式(RE模块),第三方解析库bs4(Beautifulsoup)

json数据:json模块

二进制数据:wb方式

实际爬取中,最最常遇到的是html数据,而对html数据解析最最常用的是Beautifulsoup,所以这里拿Beautifulsoup来举例解析了。

继续上面的例子,在下载网页后,用Beautifulsoup进行结构化解析

from bs4 import BeautifulSoup
import requests

#requests 解析网页
url='http://gz.ziroom.com/z/vr/61669497.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
urlhtml=requests.get(url, headers=headers)  #请求打开网页
urlhtml.encoding='utf-8'  #网页解码

soup = BeautifulSoup(urlhtml.text,'lxml')
print(soup)

解析后,就是根据结果规则获取目标信息了,这里通常使用select或find定位,详细使用可以看另外两篇文档《python 爬虫之select用法》《python 爬虫之find、find_all用法》 ,这里简单用select举个例子

from bs4 import BeautifulSoup
import requests
 
url='http://gz.ziroom.com/z/vr/61669497.html'
urlhtml=requests.get(url)
urlhtml.encoding='utf-8'
soup=BeautifulSoup(urlhtml.text,'lxml')
alink = soup.select('h1') 
 
print(type(alink))
print('------------------**----------------------')
print(alink)

3、存放数据

存放数据的形式,基本就两种,一种是直接将数据存入数据库,一种是以文件(如:txt、xlsx等)的格式存储。

存入数据库需要用pymssql包,先创建数据库链接再进行数据库交互;文件形式存储最常用的是用pandas库的to_excel\to_csv进行,直接举例吧

首先是存储到数据库的方式

#将数据写入数据库
    #连接数据库
    server = "服务器名,如果是本地数据库IP用127.0.0.1"
    user = "用户名"
    password = "密码"
    database = "数据库名"
    conn = pymssql.connect(server, user, password, database)
    cursor = conn.cursor()
    if not cursor:
        raise(NameError,"连接数据库失败")
    else:
        print('OK')
    #写入数据
    sql_xj = "INSERT INTO table1 ([年月],[日期],[来源],[区域],[类型],[套数],[面积]) VALUES (%s,%s,%s,%s,%s,%d,%d)"
    cursor.executemany(sql_xj, data_xj)
  
    # 如果没有指定autocommit属性为True的话就需要调用commit()方法
    conn.commit()
    print(time,'写入数据库成功')
    conn.close()#关闭数据库

 

然后是pandas的存储

#将数据导出到excel
import pandas as pd
df=pd.DataFrame()
df['区域']=area
df['日期']=date

df.to_excel(r'test01.xlsx')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值