简谈python爬虫

前言

python之禅:
在这里插入图片描述
在这里插入图片描述

浏览器和服务器之间有如下几种通信方式:
   GET:向服务器请求资源,请求以明文的方式传输,一般就在URL上能看到请求的参数
   POST:从网页上提交表单,以报文的形式传输,请求资源
   还有几种比较少见就不介绍

一、python爬虫

1,爬虫
网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本,由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略
爬虫是需要从HTML中提取内容,以及需要和网页做交互等。爬虫是一个程序,这个程序的目的就是为了抓取万维网信息资源,比如你日常使用的谷歌等搜索引擎,搜索结果就全都依赖爬虫来定时获取
  BeautifulSoup 库 ,一款优秀的HTML/XML解析库,采用来做爬虫不用考虑编码,还有中日韩文的文档,其社区活跃度之高,可见一斑。[注] 这个在解析的时候需要一个解析器,在文档中可以看到,推荐lxml
Requests 库,一款比较好用的HTTP库,当然python自带有urllib以及urllib2等库 ,但用起来是绝对没有这款舒服的,
2,爬虫的目标
爬虫的目标对象也很丰富,不论是文字、图片、视频,任何结构化非结构化的数据爬虫都可以爬取,爬虫经过发展,也衍生出了各种爬虫类型:
通用网络爬虫:爬取对象从一些种子 URL 扩充到整个 Web,搜索引擎干的就是这些事
垂直网络爬虫:针对特定领域主题进行爬取,比如专门爬取小说目录以及章节的垂直爬虫
增量网络爬虫:对已经抓取的网页进行实时更新
深层网络爬虫:爬取一些需要用户提交关键词才能获得的 Web 页面
爬虫的本质:模拟浏览器打开网页,获取网页中我们想要的那部分数据

让我们以一个获取网页内容为例,从爬虫技术本身出发,来说说网页爬虫,步骤如下:

   1,模拟请求网页资源  
   2,从HTML提取目标元素
   3,数据持久化

爬虫

"""让我们根据上面说的步骤来完成一个简单的爬虫程序"""
import requests

from bs4 import BeautifulSoup

target_url = 'http://www.baidu.com/s?wd=爬虫'

# 第一步 发起一个GET请求
res = requests.get(target_url)

# 第二步 提取HTML并解析想获取的数据 比如获取 title
soup = BeautifulSoup(res.text, "lxml")
# 输出 soup.title.text
title = soup.title.text

# 第三步 持久化 比如保存到本地
with open('title.txt', 'w') as fp:
    fp.write(title)

加上注释不到20行代码,你就完成了一个爬虫,简单吧

3,怎么写爬虫
学爬虫必备的知识点

基本的HTML知识,了解HTML才方便目标信息提取
基本的JS知识 ,JS可以异步加载HTML
了解CSS Selector、XPath以及正则,目的是为了提取数据
了解HTTP协议,为后面的反爬虫斗争打下基础
了解基本的数据库操作,为了数据持久化

要在编程语言方面做那些准备:

1,网页请求:
内置有urllib库,第三方库的话,同步请求可以使用requests,异步请求使用aiohttp
2,分析HTML结构并提取目标元素:
CSS Selector和XPath是目前主流的提取方式,第三方库可以使用Beautiful Soup或者PyQuery
3,数据持久化:
目标数据提取之后,可以将数据保存到数据库中进行持久化,MySQL、MongoDB等,这些都有对应
的库支持,当然你也可以保存在硬盘,
from bs4 import Beautiful #网页解析.获取数据
import re #正则表达式.进行文字匹配
import urllib.request,urllib.error #制定URL.获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLite数据库操作

def  main():
baseurl = "http://www.baidu.com" #基础的url

简单爬取:

import urllib.request
#获取一个get请求
response = urllib.request.urlopen("http://www.baidu.com")
print(response.read().decode('utf-8')) #对获取到的网页源码进行utf-8解码

#获取一个post请求 (模拟用户登陆时使用)
import urllib.parse
data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
response = urllib.request.urlopen("http://httpbin.org/post",data = data)
print(response.read().decode("utf-8"))

爬取网站的步骤:
1,设定爬取目标
2,分析目标网站
3,批量下载HTML
4,实现HTML解析,得到目标数据
5,将结果数据存储

需要引入的库

import request s #用于下载网页
from bs4 import BeautifulSoup #用于解析网页
import pprint #打印一下漂亮格式的数据
import json #爬取的数据存到json文件中

1,下载所有的页面的HTML

def download_all_htmls():
# 下载所有列表页面的HTML,用于后续的分析
htmls = []
for idx in range (24)
    url = f"http://www.crazyant.net/page/{idx+1}"
    print("craw html:",url)
    r = request.get(url)
    if r.status_code ! = 200:
         raise Exception("error")
     htmls.append(r.text)
 return htmls

2,解析HTML得到数据

def parse_single_html(html)
#解析单个HTML,得到数据
soup = BeautifulSoup(html, 'html.parser')
articles = soup.find_all("article")
datas = []
for article in articles:
#查找超链接
title_node = (
  article
  .find("h2",class_="entry-title")
  .find("a")
  )
  title = title_node,get_text()
  link = title_node["href"]
  #查找标签列表
  tag_nodes = (
  article
  .find("footer",class = "entry-footer")
  .find("span",class_="tags-links")
   .find_all("a")
   )
   tags = [tag_node.get_y=text() for tag_node in tag_nodes]
   datas.append(
       {"title":title,"link":link, "tags":tags}
       )
       return datas

3,将结果输出存储
1.MYSQL
2.本地JSON文件

with open("all_article_links.json","w") as fout:
     for data in all_datas:
          fout.write(json.dumps(data, ensure_ascii = False) + "\n")
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值