爬虫的基本操作

anaconda安装

1532113-20181204093853685-1453908198.png

打开浏览器的开发者模式--设置--更多工具--扩展程序

1532113-20181204094010442-787109169.png

安装xpath解析工具到浏览器扩展程序

1532113-20181204094948622-20620564.png

使用xpath插件查询元素ctrl+shif+x

1532113-20181204100520400-1117811526.png

获取url地址并获取源码

1532113-20181204110014730-1206911452.png

把获取的URL响应内容从字节转换成字符decode

1532113-20181204111152484-613564305.png

创建一个新的User-Agent

1532113-20181204112242265-1913067899.png

返回url的影响码getcode

1532113-20181204113618484-139592265.png

返回访问的URL地址geturl

1532113-20181204113823048-470443924.png

URL拼接

1532113-20181204115646199-345192340.png

把URL响应的内容保存到本地的HTML文件(urlencode转码)

1532113-20181204121100250-1914394996.png

URL响应的内容保存到本地html(quote转码)

1532113-20181204125759446-2075310487.png

爬取三个网页保存到本地仓库

1532113-20181204141131030-1018248766.png

爬取三个网页保存是运用多个User-Agent和延迟爬取时间,可以增加爬取的安全性

1532113-20181204142656164-1893124378.png

利用函数的方法来获取网页

1532113-20181204145629173-1348598096.png

form(post)有道翻译的抓取

1532113-20181204153234612-1946204858.png

贪婪匹配.和非贪婪匹配.

1532113-20181204162120051-1842941072.png

匹配方式分组显示

1532113-20181204163907957-1678699604.png

脑筋急转弯爬取案例

1532113-20181204172625664-944918107.png

csv方式写入对象

1532113-20181204173432643-510390160.png

用cookie模拟登陆爬取个人主页信息

1532113-20181205112347902-1966082751.png

request接受post提交的信息(有道翻译)

1532113-20181205113332832-359855200.png

使用代理IP访问

1532113-20181205115651302-502599898.png

爬取链家房源信息保存到数据库中

1532113-20181205150040240-2134528586.png

爬取链家房源信息保存到数据库中

1532113-20181205151239018-332422067.png

爬取需要账号密码登录的页面

1532113-20181205173638601-1841360321.png

CA安全证书验证verify

1532113-20181206101000548-941396915.png

urllib.request的handler处理器定义urlopen方法

1532113-20181206104007823-243574259.png

Handler处理器的分类

1532113-20181206104535361-1883743395.png

密码管理器对象操作的实现步骤

1532113-20181206111058600-1798225486.png

lxml和xpath的使用

1532113-20181206143723389-1363615043.png
1532113-20181206144303186-1099058202.png
1532113-20181206144617425-371423089.png
1532113-20181206145127764-800755453.png
1532113-20181206145416897-1126895030.png
1532113-20181206145901269-1665482856.png

抓取百度贴吧图片(校花吧)

1532113-20181206150534395-1947398290.png

import requests
from lxml import etree
import urllib.parse

class ImageSpider:
    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"}
        self.baseurl = ""
        
    # 获取所有帖子URL列表
    def getPageUrl(self,url):
        # 获取校花吧页面的html
        res = requests.get(url,headers=self.headers)
        res.encoding = "utf-8"
        html = res.text
        # 提取页面中所有帖子的URL
        parseHtml = etree.HTML(html)
        t_list = parseHtml.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
        # t_list : ["/p/32093","/p/203920","","",""]             
        for t_link in t_list:
            t_url = "http://tieba.baidu.com" + t_link
            self.getImageUrl(t_url)
    
    # 获取每个帖子中图片的URL列表
    def getImageUrl(self,t_url):
        # 获取1个帖子的响应html
        res = requests.get(t_url,headers=self.headers)
        res.encoding = "utf-8"
        html = res.text
        # 从html响应中获取图片URL列表
        parseHtml = etree.HTML(html)
        img_list = parseHtml.xpath('//div[@class="d_post_content j_d_post_content  clearfix"]/img/@src')
        for img_link in img_list:
            self.writeImage(img_link)
      
    # 保存图片
    def writeImage(self,img_link):
        # 获取每个图片的二进制
        res = requests.get(img_link,headers=self.headers)
        res.encoding = "utf-8"
        html = res.content
        # 保存到本地(以图片链接的后12位作为文件名)
        filename = img_link[-8:]
        with open(filename,"wb") as f:
            f.write(html)
            print(filename,"下载成功")

    # 主函数
    def workOn(self):
        name = input("请输入贴吧名:")
        begin = int(input("请输入开始页:"))
        end = int(input("请输入结束页:"))
        for pn in range(begin,end+1):
            # 拼接贴吧页面URL
            pn = (pn-1)*50
            kw = {"kw":name}
            kw = urllib.parse.urlencode(kw)
            fullurl = \
              "http://tieba.baidu.com/f?" + \
              kw + "&pn=" + str(pn)
            # 直接调类内函数
            self.getPageUrl(fullurl)
                                 
if __name__ == "__main__":
    spider = ImageSpider()
    spider.workOn()

xpath使用“ | ”可以多路径匹配

1532113-20181206164448892-592291607.png

爬取糗事百科xpath

1532113-20181206164749147-1468030683.png

import requests
import pymongo
from lxml import etree

class QiushiSpider:
    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/5.0"}
        # 连接对象
        self.conn = pymongo.MongoClient("localhost",
                                         27017) 
        # 库对象
        self.db = self.conn["Qiushi"]
        # 集合对象
        self.myset = self.db["qiushiinfo"]

    # 获取页面
    def getPage(self,url):
        res = requests.get(url,headers=self.headers)
        res.encoding = "utf-8"
        html = res.text
        self.parsePage(html)

    # 解析并存入数据库
    def parsePage(self,html):
        # 创建解析对象
        parseHtml = etree.HTML(html)
        # 获取每个段子的节点对象列表
        base_list = parseHtml.xpath('//div[contains(@id,"qiushi_tag_")]') 
        for base in base_list:
            # 节点对象可调用xpath
            # 用户昵称
            username = base.xpath('./div/a/h2')
            if len(username) == 0:
                username = "匿名用户"
            else:
                username = base.xpath('./div/a/h2')[0].text.strip()

            # 段子内容
            content = base.xpath('.//div[@class="content"]/span')
            # 好笑数量
            laughNum = base.xpath('.//i')[0] 
            # 评论数量
            pingNum = base.xpath('.//i')[1]

            d = {
                "username":username,
                "content":content[0].text.strip(),
                "laughNum":laughNum.text,
                "pingNum":pingNum.text
                }
            self.myset.insert(d)
            print("成功")


if __name__ == "__main__":
    spider = QiushiSpider()
    spider.getPage("https://www.qiushibaike.com/8hr/page/1/")

获取帖子中真实的URL(反爬机制)

1532113-20181206165422513-291858761.png

把json格式字符串转换为python格式

1532113-20181206172146307-723656927.png

把python格式转换为json格式

1532113-20181206172856439-19279020.png
1532113-20181206173001109-501024394.png

抓取猫眼电影时,遇到动态加载的ajax页面时,需要抓取Query String和发送请求时的Request uRL

1532113-20181206174257573-512113736.png
1532113-20181206174446305-1810331581.png
1532113-20181206174523612-1138126684.png

豆瓣电影抓取(动态页面,ajax)

测试抓取的效果

1532113-20181207095951331-654428501.png
1532113-20181207100916916-601120136.png
1532113-20181207120157946-893840683.png

当新安装的spyder没有requests库或者其他时使用CMD安装(windows)

1532113-20181211185407199-911407440.png
1532113-20181211185433027-1459886012.png

不小心关闭了ipython console窗口就重置

1532113-20181211190633195-1757336032.png

with open as f (打开模式)

1532113-20181212123529393-1737097501.png

from urllib import request 的方法来获取HTML页面

1532113-20181212181450851-458839772.png
1532113-20181212181532684-1463917480.png

使用builtwith获取网站的技术架构

1532113-20181213214606946-30508901.png
1532113-20181213214700398-2137557717.png

python-whois查看网站所有者

1532113-20181213215450702-1369318487.png
1532113-20181213215716303-2046145258.png

staus_code获取网站的状态码

1532113-20181213220425203-1614718138.png

URL基本格式(https://www.baidu.com)

1532113-20181213221757893-2016942361.png

使用fiddler4获取某个网站的基本信息

1532113-20181213223002106-1585593577.png
1532113-20181213223319756-315265637.png

设置headers的User-Agent

1532113-20181215202558354-1815068205.png

爬虫的深度优先策略(递归数据结构,堆栈结构)

1532113-20181215203939771-2039973090.png
1532113-20181215204703367-200817607.png
1532113-20181215204902283-1211375777.png
1532113-20181215204959493-710846773.png

爬虫的宽度(广度)优先策略

1532113-20181215204120701-2146873211.png

完全二叉树

1532113-20181215205123610-758312589.png

广度优先遍历

1532113-20181215205548465-670406372.png

hash算法(打印成16进制,需要先编码utf8)

1532113-20181215211835053-581951656.png

hash一个文件

1532113-20181215212913803-1969049902.png

pymysql导入

1532113-20181208210325251-457113811.png

xpath and lxml

1532113-20181217091719550-485053399.png
1532113-20181217091943853-245976348.png
1532113-20181217094240350-754227745.png
1532113-20181217094414150-183831400.png
1532113-20181217094934929-1395007241.png

获取页面中某个元素节点的匹配路径xpayh copy

1532113-20181217095756799-550652638.png
1532113-20181217095910226-124879884.png

beautifulsoup

1532113-20181217105238118-2127750744.png
1532113-20181217105536779-1977706550.png
1532113-20181217110035657-599174568.png
1532113-20181217110253990-643094015.png
1532113-20181217110510578-931944201.png

正则表达式(元字符)

1532113-20181217112627883-2007591325.png
1532113-20181217112705579-186318200.png
1532113-20181217112723823-1157072239.png
1532113-20181217113216921-1292221980.png
1532113-20181217113804844-1961853618.png
1532113-20181217113926547-1067036985.png
1532113-20181217190421485-2064984916.png
1532113-20181217190653126-1004425876.png
1532113-20181217210614481-1501063208.png

list中去重元素的两种方法、

1532113-20181221001118747-856508127.png

\s\S万能匹配符

1532113-20181221001210397-1408821674.png

猫眼抓取

1532113-20181221001151014-1438313194.png

1532113-20181221001133978-117029291.png
1532113-20181221001144101-572517237.png

1532113-20181221001128055-1628139196.png

1532113-20181220095030567-2072787050.png

GIL

1532113-20181220095813230-1978142676.png
1532113-20181220095908585-1380872817.png
1532113-20181220100044205-1523103566.png
1532113-20181220100434605-1232271061.png

动态爬虫

1532113-20181220101653518-1739264156.png
1532113-20181220101820387-614011551.png
1532113-20181220102110809-2025311860.png
1532113-20181220102737109-2120883762.png

有道词典爬虫

1532113-20181220103225563-1887260342.png
1532113-20181220103311732-770558923.png

进程,线程(拷贝1000个各种类型的文件)

1532113-20181220105344976-2041484803.png
1532113-20181220105600795-919851407.png
1532113-20181220110133888-203182077.png
1532113-20181220110350998-1223943721.png
1532113-20181220110704874-2105483861.png
1532113-20181220110914203-447658611.png
1532113-20181221090926790-51012198.png
1532113-20181221091241275-451553614.png
1532113-20181221091656291-1666717577.png
1532113-20181221093732060-1948093129.png

进程Manager

1532113-20181221095252648-810731775.png

Lock的应用和传递

1532113-20181221095855395-1499754295.png
1532113-20181221100144360-734821478.png
1532113-20181221100432421-1601051073.png

Selenium(自动化测试工具)

1532113-20181221101705822-1805393209.png
1532113-20181221104238037-973626613.png
1532113-20181221104443025-2004410298.png
1532113-20181221105431964-609627393.png
1532113-20181221110658945-1671576886.png
1532113-20181221111017973-2120466961.png
1532113-20181221113914210-627966943.png
1532113-20181222092233272-1078043109.png
1532113-20181222095538623-778444575.png
1532113-20181222100537574-1962250950.png
1532113-20181222100925828-1341972877.png

SSL安全套阶层(https=http+ssL)

1532113-20181221111620699-375288969.png

僵尸进程和孤儿进程

1532113-20181222091733459-1765989669.png

使用cookie模拟登陆

1532113-20181222103748996-1092662774.png
1532113-20181222104450553-2029614869.png
1532113-20181222104550342-413918192.png

cookiejar和验证码)

1532113-20181222105044021-805011526.png
1532113-20181222105331650-392126719.png
1532113-20181222105730111-1744005999.png
1532113-20181222111045907-458942510.png
1532113-20181222111256303-1852773758.png
1532113-20181222111401844-632577195.png
1532113-20181222111457438-1056126206.png
1532113-20181222112257489-1529804415.png
1532113-20181222113153470-1981379697.png
1532113-20181222135440965-1297734626.png

二维列表

1532113-20181222140402472-235313635.png
1532113-20181222140852289-1599709240.png
1532113-20181222151722469-1082091122.png

百度指数案例

1532113-20181222142630114-624660594.png
1532113-20181222143133931-924425978.png
1532113-20181222143558134-2019173029.png
1532113-20181222143921094-67407988.png

日志

1532113-20181222150530558-2101901265.png

关于SSL网站证书的认真问题

1532113-20181222152120051-1972939752.png

代理服务器

1532113-20181222152840661-1230705130.png
1532113-20181222153625659-1381820036.png
1532113-20181222153916228-670413932.png
1532113-20181222161021638-901930104.png

豆瓣案例

1532113-20181222170715184-1250121392.png

判断两个LIST中丢失的元素

1532113-20181222172021215-1072031450.png

双向队列和进程池

1532113-20181222181730913-303299507.png
1532113-20181222182842362-1363535457.png

反反爬

1532113-20181222194459220-622714579.png

scrapy安装

1532113-20181222195356719-49284310.png

scrapy工程

1532113-20181222204704375-1090367657.png
1532113-20181222205011935-1117356869.png
1532113-20181222213005140-1635957631.png
1532113-20181222220822462-1155430651.png
1532113-20181223085925439-1065413371.png
1532113-20181223090754691-1806844028.png
1532113-20181223091008064-624749759.png
1532113-20181223091615019-1462041694.png
1532113-20181223091700069-1532128685.png
1532113-20181223092350855-797779601.png
1532113-20181223092421839-1951462576.png
1532113-20181223092541206-218348765.png
1532113-20181223094236862-1064417273.png
1532113-20181223101040871-386723897.png
1532113-20181223101723119-1774629236.png

redis数据库的简单原理

1532113-20181223103121315-1483759883.png
1532113-20181223103345277-1090681893.png
1532113-20181223103627672-1259526446.png
1532113-20181223103734752-313077369.png

关于安装scrapy失败

1532113-20181222233416746-1120100699.png

把爬取的数据保存到MySQL

1532113-20181223105423977-276444168.png

转载于:https://www.cnblogs.com/-hjj/p/10063080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值