网络爬虫(又被称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。


模块:scrapy  requests

环境:centos


******************  如果想深入了解scrapy 请绕路  *************************

推荐   http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html


当抓取网页时,你做的最常见的任务是从HTML源码中提取数据。现有的一些库可以达到这个目的:

  • BeautifulSoup 是在程序员间非常流行的网页分析库,它基于HTML代码的结构来构造一个Python对象, 对不良标记的处理也非常合理,但它有一个缺点:慢。

  • lxml 是一个基于 ElementTree (不是Python标准库的一部分)的python化的XML解析库(也可以解析HTML)。

    (下边第二种方法有实例)

Scrapy提取数据有自己的一套机制。它们被称作选择器(seletors),因为他们通过特定的 XPath 或者CSS 表达式来“选择” HTML文件中的某个部分。

XPath 是一门用来在XML文件中选择节点的语言,也可以用在HTML上。 CSS 是一门将HTML文档样式化的语言。选择器由它定义,并与特定的HTML元素的样式相关连。

Scrapy选择器构建于 lxml 库之上,这意味着它们在速度和解析准确性上非常相似。

  选择器详见  https://scrapy-chs.readthedocs.io/zh_CN/master/topics/selectors.html

#Selector网页提取数据方法一
from scrapy import Selectorhtml = "goodbuy"
sel = Selector(text=html)
nodes = sel.xpath('//span')
for node in nodes:print(node.extract())
#Selector网页提取数据方法二
from scrapy import Selectorhtml = """goodbuy
    aabbccindex
""" sel = Selector(text=html) nodes = sel.css('li.video_part_list')for node in nodes:print(node.css('a::attr(href)'))


第一种:利用爬虫模块scrapy

    1、建立爬虫  scrapy start object 爬虫目录名

        例:scrapy start object tututu       #tututu为爬虫目录名

    2、在 爬虫目录名/爬虫目录名/spider/ 下建立爬虫文件

        例:vim pachong.py

    3、书写爬虫代码

        

import scrapyclass DmozSpider(scrapy.Spider):name="dadada"                                #定义爬虫名字 固定格式用name='爬虫名'start_urls = ["http://www.cnblogs.com/wangkongming/default.html?page=22","http://www.cnblogs.com/wangkongming/default.html?page=21",]                                            #启始的url   固定格式用start_urls=[]def parse(self,response):                    filename = response.url.split("/")[-2]   #response.url  即要爬取的urlwith open(filename,"wb") as f:                f.write(response.body)               #response.body  爬取到的网页代码

    4、启动代码 scrapy crawl dadada       #这里的dadada为爬虫的名字


第二种:利用requests模块

#coding:utf-8from datetime import datetime
from urllib.parse import urlencode
import requests
from bs4 import BeautifulSoup
import time
from itertools import producturl = "http://www.ivsky.com/"def download_url(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}response = requests.get(url,headers=headers)                 #请求网页return response.text                                         #返回页面的源码def connet_p_w_picpath_url(html):soup = BeautifulSoup(html,'lxml')           #格式化html,方便查找网页中的数据标签body = soup.body                                            #获取网页源码的bodydata_main = body.find('div',{"class":"ileft"})              #找body到'div'标签  且标签中 class=ileftif data_main:p_w_picpaths = data_main.find_all('img')                      #找到data_main中所有的img标签with open('img_url','w') as f:                         for i,p_w_picpath in enumerate(p_w_picpaths):                   #遍历p_w_picpaths 并添加序号p_w_picpath_url = p_w_picpath.get('src')                    #获取p_w_picpath中src的值f.write(p_w_picpath_url+'\r')save_p_w_picpath()
def save_p_w_picpath():with open('img_url','r') as f:i=0headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}for line in f:if line:i+=1line=line[0:(len(line)-1)]                     #切除换行符response = requests.get(url=line,headers=headers)filename=str(i)+'.jpg'with open(filename,'wb') as f:f.write(response.content)                  #将图片写进fprint('这是第%s张图片'%i)
connet_p_w_picpath_url(download_url(url))


小白笔记 如有错误 请下方评论提醒修改