Python 网络爬虫单线程版

re.S让.能够匹配\n,默认情况点是不能匹配换行符的

1.爬取网页源码中的图片

#-*- coding:utf-8 -*-
import re
import requests
with open('source.txt', 'r') as f:
    html = f.read()

#匹配图片网址,括号中为需要返回的内容
pic_url = re.findall('img src="(.*?)" class="lessonimg"', html, re.M)
i = 0
for each in pic_url:
    print "now downloading:"+each
    pic = requests.get(each)
    fp = open('pic\\'+str(i)+'.jpg', 'wb')
    fp.write(pic.content)
    fp.close()
    i += 1

2.突破反爬虫机制伪装成浏览器设置headers

#-*- coding:utf-8 -*-

import requests
import sys
import re
#很多情况下sys.defaultencoding是ascii
reload(sys)
sys.setdefaultencoding("utf-8")
type = sys.getdefaultencoding()
print type

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:42.0) Gecko/20100101 Firefox/42.0'}
html = requests.get('http://jp.tingroom.com/yuedu/yd300p/', headers=headers)
html.encoding = 'utf-8'
print html.text

for japanese in re.findall('<span style="color:#666666;">(.*?)</span>', html.text, re.S):
    print japanese

for chinese in re.findall('style="color: #039;">(.*?)</a>', html.text, re.S):
    print chinese

3.发起post请求

#-*- coding:utf-8 -*-
import re
import requests

url = 'http://www.crowdfunder.com/browse/deals&template=false'
data = {
    'entities_only': 'true',
    'page': '3'
}
html_post = requests.post(url, data=data)

title = re.findall('class="card-title">(.*?)</div>', html_post.text, re.S)
print title
for each in title:
    print each

4.爬取极客学院课程详细信息

re.search匹配第一个

re.findall匹配所有

# coding=utf-8
__author__ = 'scaleworld'
import requests
import re
import sys

reload(sys)
sys.setdefaultencoding("utf-8")

class Spider(object):
    def __init__(self):
        print '开始爬取极客学院课程信息。。。'

    # 获取源代码
    def getsource(self, url):
        html = requests.get(url)
        return html.text

    # 获取每个课程块信息
    def getlessons(self, source):
        lessons = re.findall('deg="0" >(.*?)</li>', source, re.S)
        return lessons

    # 获取课程信息,如课程名称、课程介绍、课程时间、课程等级、学习人数
    def getlessonInfo(self, lesson):
        info = {}
        info['title'] = re.search('<h2 class="lesson-info-h2"><a(.*?)>(.*?)</a></h2>', lesson, re.S).group(2).strip()
        info['desc'] = re.search('<p style="height: 0px; opacity: 0; display: none;">(.*?)</p>', lesson, re.S).group(
            1).strip()
        timeandlevel = re.findall('<em>(.*?)</em>', lesson, re.S)
        info['time'] = timeandlevel[0].strip().replace("\n", "").replace("    ", "")
        info['level'] = timeandlevel[1].strip()
        info['learnNumber'] = re.search('"learn-number">(.*?)</em>', lesson, re.S).group(1).strip()
        return info

    # 保存课程信息到文件LessionInfos.txt
    def savelessionInfos(self, lessonInfos):
        # 'w':只写,会覆盖之前写入的内容
        # 也可以用'a':追加到文件末尾
        # 如果文件不存在,则自动创建文件
        f = open('LessionInfos.txt', 'w')
        i = 0
        for each in lessonInfos:
            i += 1
            f.writelines('第' + str(i) + '个课程:\n')
            f.writelines('title:' + each['title'] + '\n')
            f.writelines('desc:' + each['desc'] + '\n')
            f.writelines('time:' + each['time'] + '\n')
            f.writelines('level:' + each['level'] + '\n')
            f.writelines('learnNumber:' + each['learnNumber'] + '\n\n')
        f.close()

if __name__ == '__main__':
    # 定义课程信息数组
    lessonInfos = []
    # 课程信息页面url
    url = 'http://www.jikexueyuan.com/course/'
    # 实例化爬虫
    spider = Spider()
    # 取[1,21)及1到20页的课程信息
    for i in range(1, 21):
        # 构建分页URL
        pageUrl = url + '?pageNum=' + str(i)
        print '正在处理页面:' + pageUrl
        source = spider.getsource(pageUrl)
        lessons = spider.getlessons(source)
        for lesson in lessons:
            lessonInfo = spider.getlessonInfo(lesson)
            lessonInfos.append(lessonInfo)
            # print 'title:'+lessonInfo.get('title')  #函数返回指定键的值,如果值不在字典中返回默认值,不会报异常
            # print 'desc:'+lessonInfo.get('desc')
            # print 'time:'+lessonInfo.get('time')
            # print 'level:'+lessonInfo.get('level')
            # print 'learnNumber:'+lessonInfo.get('learnNumber')
        print '已处理' + str(lessons.__len__()) + '个课程信息。'
    print '极客学院课程信息爬取完毕,正在保存课程信息。。。'
    spider.savelessionInfos(lessonInfos)
    print '极客学院课程信息保存完毕。'

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1726527

时间: 2025-01-30 08:36:07

Python 网络爬虫单线程版的相关文章

精通Python网络爬虫:核心技术、框架与项目实战导读

前 言 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引擎中,主要使用通用网络爬虫对网页进行爬取及存储. 随着大数据时代的到来,我们经常需要在海量数据的互联网环境中搜集一些特定的数据并对其进行分析,我们可以使用网络爬虫对这些特定的数据进行爬取,并对一些无关的数据进行过滤,将目标数据筛选出来.对特定的数据进行爬取的爬虫,我们将其称为聚焦网络爬虫.在大数据时代,聚焦网络爬虫的应用需求越来越大. 目前在国内Python网络爬虫的书籍基本上都是从国外引进翻译的,

【Python爬虫9】Python网络爬虫实例实战

爬Google搜索引擎 爬Facebook和Linkein 1自动化登录Facebook 2提取Facebook的API数据 3自动化登录Linkedin 爬在线商店Gap 爬宝马官网 爬取Google真实的搜索表单 爬取依赖JavaScript的网站Facebook 爬取典型在线商店Gap 爬取拥有地图接口的宝马官网 1.爬Google搜索引擎 # -*- coding: utf-8 -*- import sys import urllib import urlparse import lxm

精通Python网络爬虫(0):网络爬虫学习路线

作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多,而爬虫是一种很好的自动采集数据的手段. 那么,如何才能精通Python网络爬虫呢?学习Python网络爬虫的路线应该如何进行呢?在此为大家具体进行介绍. 1.选择一款合适的编程语言 事实上,Python.PHP.JAVA等常见的语言都可以用于编写网络爬虫,你首先需要选择一款合适的编程语言,这些编程语言各有优势,可以根据习惯进行选择.在此笔者推荐使用Python进行爬虫项目的编写,其优点是:简洁.掌握难度低. 2.掌握

精通Python网络爬虫:核心技术、框架与项目实战.3.1 网络爬虫实现原理详解

 摘要 通过前面章节的学习,我们已经基本认识了网络爬虫,那么网络爬虫应该怎么实现?核心技术又有哪些呢?在本篇中,我们首先会介绍网络爬虫的相关实现原理与实现技术:随后,讲解Urllib库的相关实战内容:紧接着,带领大家一起开发几种典型的网络爬虫,让大家在实战项目中由浅入深地掌握Python网络爬虫的开发:在学会了一些经典的网络爬虫开发之后,我们将一起研究学习Fiddler抓包分析技术.浏览器伪装技术.爬虫定向抓取技术等知识,让大家更加深入地进入到网络爬虫技术的世界中来.   第3章 网络爬虫实现原

Python网络爬虫原理及实例教程

本人刚学Python不久,前段时间看到华南师范大学有一个网络爬虫的项目,特意研究了一下,用Python写了一个可以多线程下载的网络爬虫. 网络爬虫基本原理 网络爬虫是?人饕?孀ト∠低车闹匾?槌刹糠帧E莱娴闹饕?康氖墙?チ??系耐?诚略氐奖镜匦纬梢桓龌蛄??谌莸木迪癖阜荨U馄?┛椭饕?耘莱嬉约白ト∠低辰?幸桓黾虻サ母攀觥?/p> 一.网络爬虫的基本结构及工作流程 一个通用的网络爬虫的框架如图所示:   网络爬虫的基本工作流程如下: 1.首先选取一部分精心挑选的种子URL; 2.将这些URL放入待抓

Python网络爬虫反爬破解策略实战

​​作者:韦玮 转载请注明出处 我们经常会写一 些网络爬虫,想必大家都会有一个感受,写爬虫虽然不难,但是反爬处理却很难,因为现在大部分的网站都有自己的反爬机制,所以我们要爬取这些数据会比较难.但是,每一种反爬机制其实我们都会有相应的解决方案,作为爬虫方的我们,重点需要处理这些反爬机制,所以,今天我们在这里就为大家分析常见的反爬策略以及破解的手段. 1. 知己知彼-常见的反爬策略有哪些? 首先,既然要破解这些常见的反爬策略,就首先需要知道常见的反爬策略有哪些,所谓知己知彼,百战百胜. 常见的反爬策

精通Python网络爬虫:核心技术、框架与项目实战.1.1 初识网络爬虫

摘要 网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理.在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高.此时,我们可以使用网络爬虫对数据信息进行自动采集,比如应用于搜索引擎中对站点进行爬取收录,应用于数据分析与挖掘中对数据进行采集,应用于金融分析中对金融数据进行采集,除此之外,还可以将网络爬虫应用于舆情监测与分析.目标客户数据的收集等各个领域.当然,要学习网络爬虫开发,首先需要认识网络爬虫,在本篇中,我们将带领

精通Python网络爬虫:核心技术、框架与项目实战.3.6 网络爬虫实现技术

3.6 网络爬虫实现技术 通过前面的学习,我们基本上对爬虫的基本理论知识有了比较全面的了解,那么,如果我们要实现网络爬虫技术,要开发自己的网络爬虫,可以使用哪些语言进行开发呢? 开发网络爬虫的语言有很多,常见的语言有:Python.Java.PHP.Node.JS.C++.Go语言等.以下我们将分别介绍一下用这些语言写爬虫的特点: Python:爬虫框架非常丰富,并且多线程的处理能力较强,并且简单易学.代码简洁,优点很多. Java:适合开发大型爬虫项目. PHP:后端处理很强,代码很简洁,模块

精通Python网络爬虫:核心技术、框架与项目实战.1.6 小结

1.6 小结 1)网络爬虫也叫作网络蜘蛛.网络蚂蚁.网络机器人等,可以自动地浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则去浏览,这些规则我们将其称为网络爬虫算法.使用Python可以很方便地编写出爬虫程序,进行互联网信息的自动化检索. 2)学习爬虫,可以:①私人订制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理,进行更深层次地理解:②为大数据分析提供更多高质量的数据源:③更好地研究搜索引擎优化:④解决就业或跳槽的问题. 3)网络爬虫由控制节点.爬虫节点.资源库构成. 4)网络爬