Python爬虫一点基础

网络爬虫的尺寸
小规模,数据量小,爬取速度不敏感,requests库(爬取网页,玩转网页,占比>90%)
中规模,数据规模较大,爬取速度敏感,scrapy库(爬取网站,爬取系列网站)
大规模,搜索引擎,爬取速度关键,定制开发(爬取全网)

爬虫引发的问题
骚扰问题 法律问题 隐私泄露

网络爬虫的限制
来源审查:判断user-agent进行限制

Robots协议 网络爬虫排除协议
规定什么可以被爬取什么不能被爬取
Robots协议的使用
自动或人工识别robots.txt,再进行内容爬取
robots基本语法
#注释,代表所有,/代表根目录
User-agent:

Disallow:/

如果访问识别,可以尝试修改访问身份
#爬去网络信息通用代码框架

import requests
def getHTMLText(url):
    try:
        r=requests.get(url,headers=kv)#修改身份
        r.raise_for_status()#如果状态不是200,发出异常
        r.encoding=r.apparent_encoding
        return r.text[1000:2000]
    except Exception as error:
        print("%s" %error)

if __name__ == '__main__':
    url="http://www.baidu.com"
    kv={'user-agent':'Mozilla/5.0'}#定义身份
    print(getHTMLText(url))

爬取图片
#爬取网络信息通用代码框架

import requests
import os
def getHTMLText(url):
    try:
        if not os.path.exists(path):
            r = requests.get(url)
            with open(path,"wb") as f:
                f.write(r.content)
                f.close()
                print("文件保存成功")
        else:
            print("文件已存在")
    except:
        print("爬取失败")

if __name__ == '__main__':
    path="E:/abc.jpg"
    url="http://pic19.nipic.com/20120308/4970979_102637717125_2.jpg"

HTML遍历方法
子集contents
父集parents
兄弟集sibling

from bs4 import BeautifulSoup
import requests
url="http://python123.io/ws/demo.html"
r=requests.get(url)
print(r.status_code)
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
#获取头部子集
#print(soup.head.contents)
#获取body子集
#print(soup.body.contents[1])
#获取title父集
#print(soup.title.parent)
#获取body父集
print(soup.body.parent)

prettify()标签
在每个标签后加一个换行符\n

beautifulsoup下
编码默认utf-8

信息标记
标记后的信息科形成信息组织结构,增加信息维度
可用于通信、存储或展示
标记的结构与信息一样具有重要价值

标记的三种信息表达方式
XML JSON YAML

#soup()==find_all()
from bs4 import BeautifulSoup
import requests
url="http://python123.io/ws/demo.html"
r=requests.get(url)
print(r.status_code)
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
#for link in soup.find_all("a"):
for link in soup("a"):
    print(link.get("href"))

import requests
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
         return ""

def fillUnivList(ulist, html):
     soup=BeautifulSoup(html,"html.parser")
     for tr in soup.find('tbody').children:
         if isinstance(tr,bs4.element.Tag):
             tds=tr("td")
             ulist.append([tds[0].string,tds[1].string,tds[2].string])

def printUnivList(ulist, num):
    tplt="{:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名","学校名称","总分",chr(12288)))
    for i in range(num):
        u= ulist[i]
        print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2],chr(12288)))
        print("Suc"+str(num))


def main():
    uinfo = []
    url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    print(uinfo,20)

main()

猜你喜欢

转载自blog.csdn.net/weixin_42481081/article/details/83154431