python爬虫爬取数据的第一步必须分析目标网站
优采云 发布时间: 2021-06-22 02:12python爬虫爬取数据的第一步必须分析目标网站
这几年python的火爆异常火爆!在大学期间,我也做了很多深入的学习。毕业后,我尝试使用python作为我的职业方向。虽然我没有如愿成为一名python工程师,但我对python的掌握也让我现在的工作发展和职业发展更加出色。便利。这个文章主要跟大家分享一下我对python爬虫的收获和感悟。
python爬虫是python应用最熟悉的方式,因为python有丰富的第三方开发库,所以可以做很多工作:比如web开发(django)、应用开发(tkinter、wxpython、qt )、数据统计与计算(numpy)、图形图像处理、深度学习、人工智能等。我平时使用python爬虫(结合tkinter开发爬虫应用),使用django开发一些小人网站。 django框架可以根据实体类自动生成管理终端,大大提高了系统的开发效率。有兴趣的朋友可以试试。
一个成功的爬虫需要对应一个标准化的网站。爬虫主要是为了方便我们获取数据。如果目标系统开发不规范,没有规则,很难用爬虫自定义一套规则来爬取,而爬虫是基本的,是定制的,需要针对不同的系统进行调整。
爬虫爬取数据的第一步必须分析目标网站的技术和网站数据结构(通过前端源码)。您可以使用 chrome 浏览器。目前python爬虫主要会面对三种网站:
1.前后端分离网站
前端通过参数访问接口,后端返回json数据。对于这种网站,python可以模拟浏览器前端,发送参数然后接收数据,完成爬虫数据目标
2.static网站
通过python的第三方库(requests、urllib),下载源码,通过xpath和regular进行数据匹配
3.动态网站
如果采用第二种方式,下载的源代码只是简单的html,源代码中没有数据,因为这样的动态网站需要通过js加载,源代码中才会有数据对于这样的网站,可以使用自动化测试工具selenium
爬虫步骤:
分析网站技术和目标数据的结构。根据第一步,分析结构,选择相应的技术策略进行数据爬取,提升性能,提高操作舒适度(结合客户端技术,为爬虫定制接口)根据需求执行数据清理数据存储,存储到数据库、文档等
反拼写机制:
1.当系统判断属于同一个ip的客户端有多次访问而没有中断时,会拒绝访问这个ip
解决方案:动态代理,不断改变ip访问目标系统,或者从免费ip代理网站爬取ip创建ip池。如果目标数据量不大,可以降低访问速度,避免反扒
2.目标系统需要注册登录才能访问
解决方法:使用python的第三方库(Faker)生成假登录名、密码、*敏*感*词*,用于自动注册登录
3.目标系统的目标数据页的链接需要处理后才能进入目标数据页进行访问
解决方法:无法正常访问目标网站的目标数据页面链接。需要研究页面中的js脚本,对链接进行处理。我个人通过搜狗浏览器爬取了微信账号文章。我遇到过这个问题。爬取到的文章链接需要通过js脚本拼接才能得到正确的链接地址
获取目标数据的位置:
通过xpath获取数据的位置,可以使用chrome浏览器调试功能通过正则匹配获取对应数据的xpath路径
Python爬虫第三方常用库:
urllib/requests 请求库
Faker 生成假数据
UserAgent 生成假数据头
etree、beautsoup 匹配数据
json 处理json数据
re 正则库
selenium 自动化测试库
sqlite3 数据库 python3自带
抓取静态网页数据:
import requests
from fake_useragent import UserAgent #提供假的请求头
from lxml import etree # 匹配数据
#爬取目标页面的url
url='http://***ip****:8085/pricePublic/house/public/index'
headers= {'User-Agent':str(UserAgent().random)}
response=requests.get(url,headers=headers)
# 获得网页源码
content=response.text
html=etree.HTML(content)
#使用xpath查找对应标签处的元素值,pageNum此处爬取对应页面的页码
pageNum=html.xpath('//*[@id="dec"]/div[2]/div/span[1]/text()')
爬取前后端分离系统的数据:
import json
import requests
#获取返回的response
url='http://***ip***/FindById/22'
response=requests.get(url)
#通过json库解析json,获得返回的数据
DataNode = json.loads(response.text).get('returndata').get('data')[0]
抓取动态数据:
以下代码示例使用 Google 浏览器,使用 selenium 库,并将浏览器设置为无头模式。爬虫会配合浏览器在后台模拟人工操作。爬虫会根据代码中定义的xpath地址,在浏览器中找到对应的位置进行操作。使用selenium抓取数据时,需要安装相应版本的浏览器驱动
import requests
from faker import Faker
from fake_useragent import UserAgent
from lxml import etree
url='http://***ip***/FindById/22'
#通过faker库获得假email和电话号码
fake=Fakeer('zh_CN')
email=fake.email()
tel=fake.phone_number()
data={
"email":email
}
#使用requests库发送post请求
response=requests.post(url,data,headers=headers)
code=response.status_code
content=response.text
#获得返回的cookies并转换为字典形式
cookies = requests.utils.dict_from_cookiejar(response.cookies)
#请求的时候带上cookies
response=requests.get(url,headers=headers,cookies=cookies)
作为合法公民,爬行只是一种技术。当我们使用它来抓取目标数据时,我们必须遵守一定的规则。每个网站的根目录下都会有robots.txt(爬虫协议)文件规定可以访问哪些网页。抓取公共信息和数据时,不得对目标系统造成严重破坏。因此,我们呼吁大家在使用各种技术开展工作的过程中要遵守各种技术。技术法规和制度规范,共同为你我他创造文明的网络环境!