• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
增强的一亩三分地
增强的一亩三分地
博客园          联系   管理     
Python爬虫(一)
之前用python做了一个爬取58同城的例子,学自python零基础爬虫视频,然后经自己更改,就可以很容易的爬取到数据,在这里记录一下学习中的知识要点。

1. 用requests库获取网页信息

原理

模拟人类访问网页,从而获取远端服务器发送的网页全部内容,也叫发送请求(requests) 。

编程

引用库:import requests
一般只用需要用到requests库的get方法 ,最简单的使用方法如下,url填需要访问的网页的网址字符串,返回请求到的内容到web_data
import requests
...
web_data = requests.get(url)
但是许多网站有反爬虫机制,直接请求可能会被识别出来我们是用机器在获取信息,我们可以使用添加请求头的方式进一步模拟人类来向远端服务器请求
import requests
...
    headers = {
        "User - Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
    }
    web_data = requests.get(url, headers=headers) 
除了添加请求头外,我们还要控制访问频率,一般使用Sleep函数就可以其参数是以秒为单位。因为人类的访问间隔在1s以上,而计算机的访问速度非常快,1s可能能达到千万次(只是很多,没有具体试过),所以一般为了保险,都会sleep(2),甚至更多。
import requests
import time

n = 10000
for i in range(n)
    web_data = requests.get(url)
    time.sleep(2)
    ...
好了,到现在为止,我们应该可以应付所有的情况,把网页的内容给爬取下来了,如果想看具体内容,可以用print函数直接打印出来,但这只是万里长征的第一步,最重要的是从网页内容中快速解析出我们需要的内容信息

2.用BeautifSoup库解析网页信息

先对爬取到的整个网页内容按照相应格式进行解析,此时我用lxml格式进行初步解析
from bs4 import BeautifulSoup
import requests

web_data = requests.get(url)
soup = BeautifulSoup(web_data.text, 'lxml')
我们只需要使用两个方法:find,find_all来搜索,find只搜索一条(如果有多个,只搜索第一个)信息,但是find_all搜索全部的信息,但不管哪个都需要浏览器中的开发者工具进行辅助,我们这里以58同城二手车交易首页、Chrome浏览器为例。右击网页空白处,选择检查,就可以看到开发者工具,点击下图箭头所指的图标,然后点击网页中的哪一部分,就可以在右边看到相应的代码。

这里写图片描述

选择到每个商品的标题上,如下图

这里写图片描述

可以看到商品的标题信息被存储在一个class=info_tit的h1标签中,然后看看其他的信息,都存储在不一样的class中,那么可以基本判定,此页的所有商品的标题信息都在class=info_tit的h1标签中,那么我们就可以筛选出所有的h1标签,然后再从中筛选出class=info_tit的那些内容
from bs4 import BeautifulSoup
import requests

web_data = requests.get(url)
soup = BeautifulSoup(web_data.text, 'lxml')
titles = soup.find_all('h1', {"class": "info_tit"})
看到代码,就很容易理解find_all方法的用法了,第一个参数是第一个需要筛选的条件,是一个字符串,第二个参数是一个字典,可以有多对键值,这里我们只有一对,class=info_tit
其他信息都是这样照猫画虎,非常简单明了,但是获取到的信息要再想办法将信息整理起来,以更人性化的方式呈现出来,那些方法在此处不多说。本人写好的整个代码可以自行从本人github获取。
posted on 2018-02-08 19:45  -leanard-  阅读(7)  评论(0)    收藏  举报  来源
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3