分享爬虫的简单知识。附带爬虫案例。

用Python写一个的爬虫。对于Python这个脚本语言来说写爬虫不是一件很难的事情。

在写爬虫之前我们先了解一些简单的爬虫知识。

爬虫分类:

1. 通用网络爬虫 百度,门户网站
2. 聚焦网络爬虫 
3. 增量式网络爬虫
4. 深层页面爬虫

简单爬虫架构:

1. URL管理器 Universal Resource Location
2. 网页下载器
3. 网页解析器
4. 输出管理器

Python实现网页解析的常用工具

1. 正则表达式 Regular Expression
2. Lxml库 Xpath语法 
    HTML XML
    <div>
        <p>你好</p>
    </div>
3. BeautifulSoup BS
    
常见爬虫框架
 
Scrapy 最流行
Pyspider 国人编写
Cola  分布式爬虫框架

下面我们先写一个简单的爬虫:
爬取百度logo
>>> import requests
>>> response = requests.get('https://www.baidu.com/img/bd_logo1.png')
>>> with open('logo.png','wb') as logo:
...     logo.write(response.content)
...
    
response.text
response.encoding
response.content
response.status_code
  上述爬虫打开百度首页就可以看到一个百度的logo。我们做的事就是将那个logo爬出来。
简单的爬取像上述即可,当我们需要爬取很多数据的时候我们就需要将自己伪装一下,避免被爬取的网站将你的ID封掉。怎么做呢?
我们可以将请求头更换为一个浏览器做一个迷惑。
方法如下:
定制请求头
>>> headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3514.0 Safari/537.36'}{}中间的User-Agent是怎么来的呢?
具体做法如下:下面是一个百度首页,我们按F12就会出现如下界面,没有的话刷新一下。

最下面我们就可以看到一个user-agent,这个东西就是请求头。我们复制即可。当然其他浏览器也可以。


下面我们就来做一个爬安居客租房信息:


#爬取安居客西安租房信息



import requests          #import引入各种库
from lxml import etree
import csv
import time
import random
from pip._vendor.msgpack.fallback import newlist_hint

def spider():  #定义抓取函数
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3514.0 Safari/537.36'}
    #定制一个请求头,伪装成浏览器
    prefix_url = 'https://xa.zu.anjuke.com/fangyuan/p'#爬取的网站页面
    for i in range(1, 10 ):
        url = prefix_url + str(i)
        html = requests.get(url, headers=headers)
        selector = etree.HTML(html.text)
        house_list = selector.xpath('//*[@id="list-content"]/div')
        house_list=house_list[2:-2]#去除列表头尾不是房源列表的div
        for house in house_list:
            title = house.xpath('div[1]/h3/a/text()')[0]
            area = house.xpath('div[1]/p[1]/text()')[0]
            unit_price = house.xpath('div[2]/p/strong/text()')[0]
            span = house.xpath('div[1]/p[2]/span[1]/text()')[0]
            square = house.xpath('div[1]/p[1]/text()[2]')[0]
            print(title,area,unit_price,span,square)
            item = [title,area,unit_price,span,square]#保存数据
            data_write(item)

        # 休息2-3秒
        time.sleep(random.randint(2, 3))
def data_write(item):#定义保存函数
    with open('fangyaun.csv','a',encoding='utf-8',newline='') as file:
        writer = csv.writer(file)
        writer.writerow(item)

# 定义一个主函数
if __name__ == '__main__':
    spider()

一个简单的爬虫算是完成了。分享使人快乐,越分享、越快乐。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值