本文最后更新于:4 years ago

网络爬虫

  1. 查看源代码

  2. 按F12查看network监听请求(抓包)

  3. 解密

    提取HTML中所有URL链接
    思路:1)搜索到所有标签

         2)解析<a>标签格式,提取href后的链接内容。

正则表达式

基础

1.\w 字母、数字、下划线

2.\W 除字母、数字、下划线

3.\d 十进制数字

4.\D 除十进制数字

5.\s 空白字符

6.\S 除空白字符

7.[abc] 代表原子表只选择其中一个abc

8.[ ^abc ] 代表非abc的一个

元字符

  1. 点 表示除换行符任意字符
  2. ^ 匹配开始位置
  3. $ 匹配结束位置
  4. ‘*’ 匹配0\1\多次
  5. ? 0\1次
  6. ‘+’ 1\多次
  7. {n} 恰好n次
  8. {n,} 至少n次
  9. {n,m} 至少n次,至多m次
  10. | 表示或
  11. () 模式单元

模式修政符

  1. I 匹配时忽略大小写
  2. M 多行匹配
  3. L 本地化识别匹配
  4. U Unicode
  5. S 让. 匹配包括换行符

应用:

string="Python"
pat="pyt"
rst=re. search(pat, string, re.)
print(rst)

贪婪模式与懒惰模式

应用:

#贪婪模式与懒惰模式
 string="poythonyhjskjsa
pat1="p.*y"#贪婪模式
pat2="p.*?y"#懒惰模式

python 中正则表达式函数

  1. re.match() #与search用法一致,不过是从头匹配

  2. re.search() #第一个变量放正则表达式,第二个放内容

  3. re.sub()

  4. 全局匹配

    #全局匹配格式re. compile(正则表达式). findall(数据)
    rst=re. compile(. findall(string)
    

常见正则实例

  1. 匹配网址:”[a-zA-Z]+://[ ^\s]*[.com|.cn]”
  2. 匹配电话号码:”\d{4}-\d{7} |\d{3}-\d{8} “

简单爬虫urllib编写

import urllib.request
import re #正则库
data = urllib.request.urlopen(url).read().decode("utf-8")
pat = "正则表达式"
result = re.compile(pat).findall(data) #列表
print(result)
 import urllib. request
#ur retrieve(网址,本地文件存储地址)直接下载网页到本地
 ur ll ib. request. ur  Iretrieve ("http: //www. baidu. com", "d: \" )
 urIlib. request. ur lcleanup
#看网页相应的简介信息info
 file=urllib. request. ur lopen ("https: //read. douban. com/pr..")
 print(file. infoO)
#返回网页爬取的状态码getcode
 print(file. getcode()
#获取当前访问的网页的url, geturI0
 print(file. geturl0)
post请求实战
 import urllib. request
 import urllib. parse
 postur l="http: //www. igianyue. com/mypost/"
 postdata=ur llib. parse. ur lencode (
 "name": "ceo@txk7. com"
 "pass": "kjsahg jkashg",
 ]) encode("utf-8")
#进行post,就需要使用 ur Ilib. reqestRequest下面的(真实post地址,post数据
 req=ur llib. request. Request (postur, postdata)
 rst=ur ll ib. request. ur lopen(reg. read. decode ("utf-8")
open(":\\我的教学\Python\韬云教育-讯 Python爬虫pw")

requests 库

import requests
# 添加 headers
headers = {
    "User-Agent":..
}
response = request.get(url,headers=headers)
demo = response.text #网站源代码
response.content #二进制文件

BeautifulSoup 库

1.使用方式

from bs4 import BeautifulSoup
soup = BeautifulSoup("<p>data</p>",'html.parser')
soup.prettify() #可以使源代码清晰

2.基本元素

Tag 最基本的信息组织单元,分别用<>和</>表明开头和结尾
Name 标签的名字,

的名字是‘p’,格式:.name
Attributes 标签的属性,字典形式组织,格式:.attrs
NabigableString 标签内非属性字符串,<>…</>中字符串,格式:.string
Comment 标签内字符串的注释部分,一种特殊的Comment类型

3.标签树的平行遍历

属性 说明
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
.next_siblings 迭代类型,返回按照HTML文本顺序的下一个平行节点标签
.previous_siblings 迭代类型,返回按照HTML文本顺序的上一个平行节点标签

4.获取href

import requests
# 添加 headers
headers = {
    "User-Agent":..
}
response = request.get(url,headers=headers)
demo = response.text #网站源代码
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo,'html.parser')
for link in soup.find_all('a'):
    print(link.get('href'))

find_all相关方法

方法 说明
<>.find() 搜索且只返回一个结果,字符串类型,同.find_all()参数
<>.find_parents() 在先辈节点中搜索,返回列表类型,同.find_all()参数
<>.find_parent() 在先辈节点中返回一个结果,字符串类型,同.find_all()参数
<>.find_next_siblings() 在后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_next_sibling() 在后续平行节点中返回一个结果,字符串类型,同.find_all()参数
<>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling() 在前序平行节点中返回一个结果,字符串类型,同.find_all()参数

Scrapy 框架解析

requests Scrapy
页面级爬虫 网站级爬虫
功能库 框架
并发性考虑不足,性能较差 并发性好,性能较高
重点在于页面下载 重点在于爬虫结构
定制灵活 一般定制灵活,深度定制困难
上手十分简单 入门稍难

Scrapy 常用命令

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

Scrapy使用步骤

1.选择一个文件夹写项目 输入命令 scrapy startproject 项目名称

2.输入命令 scrapy genspider py名称 域名

3.再 py名称 中配置爬虫

4.输入命令 scrapy crawl py名称 运行爬虫

request 类

respond 类


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

pymysql库 Previous
Vue文档学习 Next