欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python3.5 网络爬虫简单入门

程序员文章站 2022-05-08 18:27:14
...

一.网络爬虫简单介绍

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫.

相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:

(1). 对抓取目标的描述或定义;

(2). 对网页或数据的分析与过滤;

(3) .对URL的搜索策略.

二.网络爬虫步骤:

开发环境准备:Ubuntu16.04+Python3.5+PyCharm

(1). 首先通过urllib的request打开Url得到网页html文档;

(2). 右键点击浏览器打开网页源代码分析元素节点;

(3) .通过Beautiful Soup或正则表达式提取需要的数据;

(4) .存储数据到磁盘或数据库(抓取,分析).

三.网络爬虫实例简介

1.爬取百度首页的标题汉字

(1).代码展示baidu.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : baidu.py
# @Author: Jon
# @Date  : 18-9-13
# @Desc  :

from bs4 import BeautifulSoup
from urllib import request

def parse(url):
    response = request.urlopen(url)
    html = response.read()
    data = html.decode("utf-8")
    soup = BeautifulSoup(data, "html.parser")
    for list in soup.find_all("a"):
        if list.string==None:
            continue
        else:
            print(type(list.string))
            print(list.string)

if __name__=="__main__":
    url = "http://www.baidu.com"
    parse(url)

(2).run结果

<class 'bs4.element.NavigableString'>
手写
<class 'bs4.element.NavigableString'>
拼音
<class 'bs4.element.NavigableString'>
关闭
<class 'bs4.element.NavigableString'>
百度首页
<class 'bs4.element.NavigableString'>
登录
<class 'bs4.element.NavigableString'>
新闻
<class 'bs4.element.NavigableString'>
hao123
<class 'bs4.element.NavigableString'>
地图
<class 'bs4.element.NavigableString'>
视频
<class 'bs4.element.NavigableString'>
贴吧
<class 'bs4.element.NavigableString'>
学术
<class 'bs4.element.NavigableString'>
登录
<class 'bs4.element.NavigableString'>
设置
<class 'bs4.element.NavigableString'>
更多产品
<class 'bs4.element.NavigableString'>
资讯
<class 'bs4.element.NavigableString'>
贴吧
<class 'bs4.element.NavigableString'>
知道
<class 'bs4.element.NavigableString'>
音乐
<class 'bs4.element.NavigableString'>
图片
<class 'bs4.element.NavigableString'>
视频
<class 'bs4.element.NavigableString'>
地图
<class 'bs4.element.NavigableString'>
文库
<class 'bs4.element.NavigableString'>
更多»
<class 'bs4.element.NavigableString'>
把百度设为主页
<class 'bs4.element.NavigableString'>
关于百度
<class 'bs4.element.NavigableString'>
About  Baidu
<class 'bs4.element.NavigableString'>
百度推广
<class 'bs4.element.NavigableString'>
使用百度前必读
<class 'bs4.element.NavigableString'>
意见反馈
<class 'bs4.element.NavigableString'>
京公网安备11000002000001号

Process finished with exit code 0

 

2.爬取知乎网健身美女的图片

(1).代码展示zhihu.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : zhihu.py
# @Author: Jon
# @Date  : 18-9-13
# @Desc  :

from urllib import request
from bs4 import BeautifulSoup
import re
import time

def parse(url):
    html = request.urlopen(url).read().decode('utf-8')
    soup = BeautifulSoup(html, 'html.parser')

    links = soup.find_all('img', 'origin_image zh-lightbox-thumb', src=re.compile(r'.jpg$'))
    print(links)

    path = r'/home/jon/picture/'
    for link in links:
        print(link.attrs['src'])
        request.urlretrieve(link.attrs['src'], path + '%s.jpg' % time.time())



if __name__=="__main__":
    url = "https://www.zhihu.com/question/22918070"
    parse(url)

 

3.爬取importnew网站首页文章的标题和链接

(1).代码展示importnew.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : importnew.py
# @Author: Jon
# @Date  : 18-9-13
# @Desc  :

from urllib import request
from bs4 import BeautifulSoup

def parseTitle(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
    page = request.Request(url, headers=headers)
    page_info = request.urlopen(page).read().decode('utf-8')
    soup = BeautifulSoup(page_info, 'html.parser')

    titles = soup.find_all('a', 'meta-title')
    for title in titles:
        print(title.string)
        print(title.get('href'))

(2).run结果

Java异常处理的9个最佳实践
http://www.importnew.com/29603.html
Map大家族的那点事儿(1) :Map
http://www.importnew.com/29642.html
SpringBoot | 第十五章:基于Postman的RESTful接口测试
http://www.importnew.com/29635.html
Map大家族的那点事儿(3) :TreeMap
http://www.importnew.com/29713.html
Map 大家族的那点事儿 ( 7 ) :ConcurrentHashMap
http://www.importnew.com/29832.html
Map 大家族的那点事儿 ( 6 ) :LinkedHashMap
http://www.importnew.com/29828.html
Map 大家族的那点事儿 ( 5 ) :WeakHashMap
http://www.importnew.com/29825.html
JDK 源码阅读 : DirectByteBuffer
http://www.importnew.com/29817.html
Java 线程池详解
http://www.importnew.com/29813.html
Java线程面试题 Top 50
http://www.importnew.com/12773.html
8张图理解Java
http://www.importnew.com/11725.html
Java 8简明教程
http://www.importnew.com/10360.html
100个高质量Java开发者博客
http://www.importnew.com/7469.html
HashMap的工作原理
http://www.importnew.com/7099.html
分布式实时日志分析解决方案 ELK 部署架构
http://www.importnew.com/27705.html
IDEA 代码生成插件 CodeMaker
http://www.importnew.com/27685.html
代码生成利器:IDEA 强大的 Live Templates
http://www.importnew.com/27671.html
编写高质量代码的思考
http://www.importnew.com/27574.html
Map 大家族的那点事儿 ( 6 ) :LinkedHashMap
http://www.importnew.com/29828.html
Map 大家族的那点事儿 ( 5 ) :WeakHashMap
http://www.importnew.com/29825.html
JDK 源码阅读 : DirectByteBuffer
http://www.importnew.com/29817.html
Java 线程池详解
http://www.importnew.com/29813.html
Map大家族的那点事儿(4) :HashM...
http://www.importnew.com/29724.html
Linux 查看进程消耗内存情况总结
http://www.importnew.com/29782.html
SpringBoot | 第十七章:web ...
http://www.importnew.com/29795.html
SpringBoot | 第十八章:web 应用开...
http://www.importnew.com/29800.html
Java 线程池详解
http://www.importnew.com/29813.html
JDK 源码阅读 : DirectByteBu...
http://www.importnew.com/29817.html
Map 大家族的那点事儿 ( 5 ) :We...
http://www.importnew.com/29825.html
Map 大家族的那点事儿 ( 6 ) :Lin...
http://www.importnew.com/29828.html
Map 大家族的那点事儿 ( 7 ) :Concu...
http://www.importnew.com/29832.html
Java面试:投行的15个多线程和并发...
http://www.importnew.com/29562.html
SpringBoot | 第九章:Mybatis-p...
http://www.importnew.com/29501.html
SpringBoot | 第十三章:测试相...
http://www.importnew.com/29579.html
 SpringBoot | 第十二章:Rabb...
http://www.importnew.com/29557.html
一次Java内存泄漏调试的有趣经历
http://www.importnew.com/29591.html
oracle 中 print_table 存储过程...
http://www.importnew.com/29698.html
按钮条件逻辑配置化的可选技术方案
http://www.importnew.com/29704.html
Map大家族的那点事儿(3) :TreeM...
http://www.importnew.com/29713.html
Map大家族的那点事儿(4) :HashM...
http://www.importnew.com/29724.html
Linux查看分区文件系统类型总结
http://www.importnew.com/29492.html

Process finished with exit code 0