pygo

基础

一、视频

www.bilibili.com/video/BV143… 视频较旧

二、安装Anaconda, 配置清华镜像

参考 www.cnblogs.com/singleYao/p…

三、一些包

  • 避坑
  1. 先准备chromedriver驱动, 下载后需配置环境变量。官网下载地址为: chromedriver.chromium.org/downloads

  2. 如果执行pip3 install xxx报错如下, 可使用conda install xxx替代;

  3. 也可以下载whl进行本地安装pip3 install C/fastwork/.../xxx.whlpypi.org/search/

  4. 遇到ImportError: DLL load failed while importing etree: 找不到指定的模块。, ①卸了出问题的包重新安装就可以; ②还有可能是.condarc配置文件写的有问题, 可以参考6中的配置进行调整;

  5. 遇到ValueError: check_hostname requires server_hostname 把梯子关掉就好了...

  6. 遇到Warning: >10 possible package resolutions (only showing differing packages)...需要修改C:\Users\XXX\.condarc文件:

channels:
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
show_channel_urls: true
custom_channels:
  conda-forge: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

2021年12月2日 13:43:20 参考: st1020.top/resolve-ana…

  • requests: cmd下执行pip3 install requests
  • selenium: pip3 install selenium, 不知道为什么我的会报错...,改用conda install selenium就好了
  • phantomjs: 下载后需配置环境变量(phantomjs.org/download.ht… 由于chromedriver需要启动浏览器, 太麻烦, 可以改用phantomjs在后台处理任务
  • lxml: 用于解析数据。
  • beautifulsoup: 依赖于lxml, 解析网页用。安装比较特殊: pip3 install beautifulsoup4文档
  • pyquery: 类似于jQuery的一个东西。pythonhosted.org/pyquery/
  • pymysql: 用于操作mysql数据库。MySQL 8修改密码👉www.cnblogs.com/wangjiming/…
  • pymongo: 用于操作MongoDB数据库。MongoDB 配合 Robo 3T 使用很不错。
  • redis: key value 数据库。启动 .\redis-server.exe redis.windows.conf ; 打开 redis-cli.exe -h 127.0.0.1 -p 6379。Windows下重启Redis后数据全部丢失问题, 需要同时将redis.windows.confredis.windows-service.conf中的appendonly no改为yes, 启动时使用redis-server.exe redis.windows.conf。可视化 github.com/qishibo/Ano…
  • flask: Web库。dormousehole.readthedocs.io/en/latest/
  • django: Web服务器框架, 提供后台管理, 模板引擎和路由等。docs.djangoproject.com
  • jupyter: 用于本地在线管理笔记本、代码和数据。常用方式为cmd中执行jupyter notebook, 打开网页进行管理。jupyter.org/documentati…
  • 我艹: 在LinuxMac上执行一条命令即可安装全部12个常用包: pip3 install requests selenium phantomjs lxml beautifulsoup4 pyquery pymysql pymongo redis flask django jupyter

image.png

四、包的用法

chromedriver / phantomjs

🍎两种方式都需要去各自官网上下载对应.exe文件,并配置好环境变量。chromedriver还需要同本地的谷歌浏览器版本号保持一致!

>>> from selenium import webdriver
>>> driver = webdriver.Chrome()  
>>> driver.get('http://www.baidu.com')
>>> driver.page_source

使用phantomjs仅需改用driver = webdriver.PhantomJS()

☘ 要保持本地 Chrome 和 ChromeDriver 版本一致, 否则报错

urllib & re

>>> import urllib
>>> import urllib.request
>>> urllib.request.urlopen('http://www.baidu.com')
<http.client.HTTPResponse object at 0x00000215ABA16850>
>>> import re
>>>

beautifulsoup

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<html></html>','lxml')

pyquery

>>> from pyquery import PyQuery as pq
>>> doc = pq('<html></html>')
>>> doc = pq('<html>Hello</html>')
>>> result = doc('html').text()
>>> result

pymysql

>>> import mysql
>>> conn = pymysql.connect(host='localhost',user='root',password='ma1bao2',port=3306,db='sys')
>>> cursor = conn.cursor()
>>> cursor.execute('select * from sys_config')

pymongo

>>> import pymongo
>>> client = pymongo.MongoClient('localhost')
>>> db = client['pytestdb']
>>> db['table'].insert_one({'name':'Bob'})
<pymongo.results.InsertOneResult object at 0x000002563A6943C0>
>>> db['table'].find_one({'name':'Bob'})
{'_id': ObjectId('61a874637604b71b1c23de25'), 'name': 'Bob'}

redis 无法使用

>>> import redis
>>> r = redis.Redis('localhost',6379)
>>> r.set('name','Bob')
True
>>> r.get('name')
b'Bob'
>>>

🍎如果出现如下问题, 说明没有开启redis服务(开启命令.\redis-server.exe redis.windows.conf)

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

🍌为了便捷redis在Windows系统上的使用, 做成批处理形式更方便:

先准备bat service_start.bat

::启动redis的命令
@echo off
::这是简单的输出,相当于java中的system.out.println()
echo redis-server start......
::设置启动窗口的标题
title redis-server
::定义一个变量ENV_HOME
set ENV_HOME="C:\fastwork\Redis"
C:
::设置启动窗口的颜色
color 0a
cd %ENV_HOME%
redis-server.exe redis.windows.conf
exit

双击启动 service_redis_startup.vbs

set ws=wscript.createobject("wscript.shell")
ws.run "service_start.bat /start",0

image.png

五、Anaconda常用命令

www.tspweb.com/key/anacond…

六、pip 命令

  • 一键更新所有包 :
pip list --out
pip install pip-review
pip-review --local --interactive

or

pip install pipupgrade
pipupgrade --verbose --latest --yes

爬虫

请求网站并提取数据的自动化程序。 四步:发起请求 -> 获取响应内容 -> 解析内容 -> 保存数据

import requests
//看下响应数据
rep = requests.get('http://www.baidu.com')
print(rep.text)
print(rep.headers)
print(rep.status_code)

//下载个图片到本地,  Windows要用`\\` !!!
rep = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(rep.content)
>>> with open('D:\\PythonFiles\\result.png','wb') as f:
...  f.write(rep.content)
...  f.close()
...
6617

python 能抓取网页文本(如html,json等); 获取到的图片和音视频数据格式为二进制的保存为相应的格式即可。 python 解析数据的方式包括: 直接处理,json,正则表达式,beautifulsoup,pyquery,xpath等。

绝大多数情况下直接获取网页地址的响应数据和我们实际看到的网页是有差别的, 因为网页中的JavaScript会通过ajax更新页面数据, 所以这时候需要用的一些库来完成网页数据的抓取, 下面以selenium+webdriver为例:

>>> import selenium
>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get('http://www.taobao.com')
>>> print(driver.page_source)

还可以使用Splash,PyV8,Ghost.py

数据保存:

1.可以保存为文本,json,xml等,

2.关系型数据库mysql,oracle,sql server等,

3.非关系型数据库MongoDB,Redis等

4.图片,音视频二进制文件直接保存为特定格式即可。

urllib

菜鸟教程 www.runoob.com/python3/pyt… 廖雪峰 www.liaoxuefeng.com/wiki/101695…

eg:

>>> from urllib import request,parse
>>> url = 'http://www.baidu.com'
>>> dict ={
... 'name':'Kam'
... }
>>> data = bytes(parse.urlencode(dict),encoding='utf8')
>>> req = request.Request(url=url,data=data,method='GET')
>>> req.add_header('User-Agent','Mozilla/4.0(compatible;MSIE 5.5;Windows NT)')
>>> response = request.urlopen(req)
>>> print(response.read().decode('utf8'))

requsts 基本使用

  • json
>>> import requests
>>> import json
>>> response = requests.get('http://httpbin.org/get')

>>> print(type(response.text))
<class 'str'>

>>> print(response.json())
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61adb83c-7161df155d5c8ec333436791'}, 'origin': '111.203.227.178', 'url': 'http://httpbin.org/get'}

>>> print(json.loads(response.text))
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.26.0', 'X-Amzn-Trace-Id': 'Root=1-61adb83c-7161df155d5c8ec333436791'}, 'origin': '111.203.227.178', 'url': 'http://httpbin.org/get'}

>>> print(type(response.json()))
<class 'dict'>

>>> print(response.text)
{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.26.0",
    "X-Amzn-Trace-Id": "Root=1-61adb83c-7161df155d5c8ec333436791"
  },
  "origin": "111.203.227.178",
  "url": "http://httpbin.org/get"
}

🍎

image.png

  • 获取二进制文件
>>> response = requests.get('https://github.com/favicon.ico')
>>> print(type(response.text),type(response.content))
<class 'str'> <class 'bytes'>

安装指定渠道指定版本的包

anaconda.org/menpo/

conda install --channel https://conda.anaconda.org/menpo lxml

conda install -c conda-forge lxml=4.6.4

浏览器加载过程

  • 构建dom树
  • 子资源加载 - 加载外部的css、图片、js等外部资源
  • 样式渲染 - CSS执行

2021年12月23日 10:01:06 www.bilibili.com/video/BV1YM… www.bilibili.com/video/BV143…


posted @ 2021-11-30 16:51  javakam  阅读(0)  评论(0)    收藏  举报  来源