Python网络爬虫与信息提取

requests库安装:

pip install requests

安装完成之后,打开ide测试

import requests
# 访问百度
r = requests.get("http://wwww.baidu.com")
# 返回状态码
r.status_code
# 改变网页编码为utf-8
r.encoding = 'utf-8'
# 以文本格式显示网页信息
r.text

request库中常见的7种方法

图片

r =request.get(url)
# 方法介绍
# 该方法构造一个向服务器请求资源的request对象
# 返回一个包含服务器资源的respon对象

图片

图片

request2库通用代码框架

图片

import requests
def getHTMLText(url):
    try:
        r = requests.get(url)
        r.raise_for_status() # 如果状态码不是200,引发HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
        
        

图片

图片爬取存储代码

import requests
import os
url ='http://image.com.123.jpg'
root = 'D:/test'
path = root + url.split('/').[-1]
try:
  if not os.path.exists(root):
    mkdir(root)
  if not os.path.exists(path):
    r = requests.get(url)
    with open(path,'wb') as f:
      f.write(r.content)
      f.close()
      print('文件保存成功')
  elif:
    print('文件已存在')
except:
  print('爬取失败')      

Beautiful Soup库:

用来解析标签,以树状结构显示:

图片

标签树遍历:

图片

图片

图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzXNwh0j-1583852947209)(https://uploader.shimo.im/f/mldmDFPneTU9LkrX.png!thumbnail)]

正则表达式:

操作符说明实例
.表示任何单个字符
[]字符集,对单个字符给出取值范围[abc]表示a、b、c,[a-z]表示a到z单个字符
[^]非字符集,对单个字符给出排除范围[^abc]表示非a或b或c的单个字符
*前一个字符0次或无限次扩展abc*表示ab、abc、abcc等
+前一个字符1次或无限次扩展abc+表示abc、abcc等
前一个字符0次或1次扩展abc?表示ab、abc
|左右表达式任意一个abc|def表示abc、def
{m}扩展前一个字符m次ab{2}c表示abbc
{m,n}扩展前一个字符m至n次(包含n)ab{1,2}c表示abc,abbc
^匹配字符串开头^abc表示以abc开头的字符串
$匹配字符串结尾abc$表示以abc结尾的字符串
()分组标记,内部只能使用|(abc)表示abc,(abc|def)表示abc,def
\d数字,等价于[0-9]
\w单词字符,等价于[A-Za-z0-9]

re库:

Tips:当正则表达式包含转移字符时,使用原生字符

re库主要功能函数:

函数说明
re.search()在一个字符串搜索匹配正则表达式的第一个位置,返回match对象
re.match()从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()搜索字符串,以列表类型返回全部能匹配的子串
re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer()搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub()在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
re.search(pattern,string,flags)

图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSgPQwno-1583852947210)(https://uploader.shimo.im/f/XkqxbwiE50c6vpYk.png!thumbnail)]

图片

图片

re库的贪婪匹配和最小匹配:

re库默认为贪婪匹配,即输出匹配最长的2子串

最小匹配:

图片

Scrapy爬虫框架:

框架介绍:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7AeD0DG-1583852947214)(https://uploader.shimo.im/f/Jkp1ICTPWj8PARmw.png!thumbnail)]

图片

Scrapy常用命令:

startproject创建一个新工程scrapy startproject[dir]
genspider创建一个爬虫scrapy genspider [options]
settings获得爬虫配置信息scrapy settings [options]
scrawl运行一个爬虫scrapy crawl
list列出工程中所有爬虫scrapy list
shell启动URL调试命令行scrapy shell [url]

一个使用Scrapy的简单例子:

# 在命令行输入命令,建立一个工程
scrapy startproject python123demo

图片

cd python123demo/
# 创建一个爬虫 demo为爬虫名称 python123.io为爬取网站
scrapy genspider demo python123.io

运行之后会产生一个demo.py文件:

图片

然后更改demo.py中的代码:

# -*- coding: utf-8 -*-
import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']

    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname,'wb') as f:
            f.write(response.body)
    self.log('Saved file %s.' % fname)
# 然后在命令行执行运行爬虫的命令
 scrapy crawl demo

执行命令之后,捕获页面存储在demo.html中:

图片

图片

yield关键字使用:生成器,可以利用一个存储单元实现输出一个列表

Request类

属性或方法说明
.urlRequest对应的URL地址
.headers字典类型风格的请求头
.body请求内容主体,字符串类型
.meta用户添加的扩展信息,在Srapy内部模块间传递信息使用
.copy()复制该请求

Response类

属性或方法说明
.urlResponse对应的URL地址
.statusHTTP状态码,默认是200
.headersResponse对应的头部信息
.bodyResponse对应的内容信息,字符串类型
.flags一组标记
.request产生Response类型对应的Request对象
.copy复制该相应

CSS Selector使用

<HTML>.css('a::attr(href)').extract()
# a是标签名称 href是标签属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值