python爬虫边看边学(基础)

网络爬虫(Web Spider)

一、什么是网络爬虫

       百度百科是这么说的:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

       网络爬虫最重要的应用就是搜索引擎。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,通过相应的索引技术组织这些信息,提供给搜索用户进行查询。网络爬虫也为中小站点的推广提供了有效的途径。

       用python写网络爬虫语法优美、代码简洁、开发效率高、支持的模块多。相关的HTTP请求模块和HTML解析模块非常丰富。还有Scrapy和Scrapy-redis框架让我们开发爬虫变得异常简单。

二、python网络爬虫的流程

       网络爬虫的流程其实非常简单,主要可以分为三部分:(1)获取网页;(2)解析网页(提取数据);(3)存储数据。

 

 

       (1)获取网页就是给一个网络发送请求,该网址会返回整个网页的数据。类似于在浏览器中键入网址并按回车键,然后可以看到网站的整个页面。

       (2)解析网页就是从整个网页的数据中提取想要的数据。类似于在浏览器中看到网站的整个页面,如果你想找的是产品的价格,价格就是你想要的数据。

       (3)存储数据也很容易理解,就是把数据存储下来,我们可以存储在csv中,也可以存储在数据库中。

三、技术实现

       1、获取网页

          获取网页的基础技术:request、urllib和selenium(模拟浏览器)。

          获取网页的进阶技术:多进程多线程抓取、登录抓取、突破IP封禁和服务器抓取。

       2、解析网页

          解析网页的基础技术:re正则表达式、BeautifulSoup和lxml。

          解析网页的进阶技术:解决中文乱码。

       3、存储数据

          存储数据的基础技术:存入txt文件和存入csv文件。

          存储数据的进阶技术:存入MySQL数据库和存入MongoDB数据库。

四、编写第一个简单的爬虫

       1、第一步:获取页面

import requests

link = r'https://www.cnblogs.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows;U;Windows NT 6.1;en-US;rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers=headers)
print(r.text)

  上述代码获取了博客园首页的HTML代码。首先import requests,使用requests.get(link,headers=headers)获取网页。

        (1)用requests的headers伪装成浏览器访问。

       (2)r是requests的Response回复对象,我们从中可以获取想要的信息。R.text是获取的网页内容代码。

       2、第二步:提取需要的数据

import requests
from bs4 import BeautifulSoup

link = r'https://www.cnblogs.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows;U;Windows NT 6.1;en-US;rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
title = soup.find("a", class_='post-item-title').text.strip()
print(title)

  在获取整个页面的HTML代码后,需要从整个网页中提取第一篇文章的标题。

       这里用到BeautifulSoup库对爬下来的页面进行解析。首先需要导入这个库,然后把HTML代码转化为soup对象,接下来用soup.find(“a”,class_=’post-item-title’).text.strip()得到第一篇文章的标题,并且打印下来。

       那么,我们怎么从那么长的代码中准确找到标题的位置呢?使用Chrome浏览器的“检查(审查元素)”功能就能找到元素的位置。

         (1)使用chrome浏览器打开博客网首页www.cnblogs.com。右击网页页面,在弹出的快捷菜单中单击“检查”命令,或按F12。

         (2)出现下图审查元素页面。单击上方的鼠标键按钮,然后在页面上单击想要的数据,下面的Elements会出现相应的code所在的地方,就定位到想要的元素了。

         (3)在代码中找到深色的地方,为<a class=”post-item-title” href=https://www.cnblogs.com/TomDwan/p/14550984.html target=’_blank’>文件上传漏洞全面渗透姿势总结</a>。可以用soup.find("a", class_='post-item-title').text.strip()提取标题。

       3、第三步:存储数据

import requests
from bs4 import BeautifulSoup

link = r'https://www.cnblogs.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows;U;Windows NT 6.1;en-US;rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
title = soup.find("a", class_='post-item-title').text.strip()
print(title)

with open('title.txt', 'a',encoding='utf-8') as f:
    f.write(title)

  存储到本地的txt文件非常简单,在第二步的基础上加2行代码就可以实现。txt文件地址应该和python文件放在同一个文件夹。

 

posted @ 2021-03-25 17:48  wangshanglinju  阅读(53)  评论(0编辑  收藏  举报