python学习(二)百度爬虫0.1

参照着网上的爬虫案例(点我),先做了一个demo,基本的爬虫项目创建,以及数据抽取,数据分析,数据保存等等过程基本上有所掌握。

我的需求是需要检索指定的百度贴吧,根据指定的关键字库,搜索出含有关键字的链接,并抽取出来,用于后续告警。

因此,基于需求,分如下步骤:

第一:基于Scrapy创建爬虫项目;

第二:新建TieBaSpider爬虫;

第三:新建外部关键字库dictionary.txt文件,贴吧地址配置url.txt文件;

第一步参考晚上案例。

从第二步开始,编写爬虫,同时创建实例对象以及创建管道。

爬虫代码:


# -*- coding:gbk -*-
from scrapy.spider import Spider
from scrapy.selector import Selector
from tutorial.items import TieBa

import codecs
import re

class TieBaSpider(Spider):
name = "tieba"
allowed_domains = ["tieba.baidu.com"] #限定爬虫搜索域
start_urls = []
dictionarys = []

def __init__(self):
self.readFile(self.dictionarys, ‘dictionary.txt‘)
self.readFile(self.start_urls, ‘url.txt‘)

def readFile(self, file, fileName):
tempFile = codecs.open(fileName,‘r‘)
for temp in tempFile.readlines():
#去回车符
if temp[-1] == ‘\n‘:
temp = temp[0:-1]
file.append(temp)
tempFile.close()

def parse(self, response):
sel = Selector(response)
sites = sel.xpath(‘//div[@class="threadlist_text threadlist_title j_th_tit notStarList "]‘)
items = []

for site in sites:
item = TieBa()
title = site.xpath(‘a/@title‘).extract()
childLink = site.xpath(‘a/@href‘).extract()

item[‘title‘] = self.change(title)
item[‘childLink‘] = "http://tieba.baidu.com" + self.change(childLink)

for key in self.dictionarys:
if item[‘title‘].find(key.decode(‘gbk‘)) != -1:
items.append(item)

return items

def change(self, field):
for temp in field:
return temp

name用来指定爬虫的名字

allowed_domains指定爬虫检索的限定域

在__init__方法中,将外部的关键字字典文件dictionary.txt与贴吧指定文件url.txt文件的内容读入到工程中。

在读文件的时候,如果有多行,python不会主动去除换行符,需要代码处理下(说是open方法的第二个参数配置为’r’就可以解决,但是我没搞定)。

parse函数是Scrapy的默认回调函数,针对start_urls中的每一条url,Scrapy都会创建一个Request,然后默认会回调parse函数,传入response。

在字符串查找的时候,因为在windows系统下,python读文件内容时的编码为ascii码,需要转换为其它编码才能进行比较。这里选用gbk是因为百度贴吧的html编码为gbk。

change方法是将list转换为string,不知道还有其它办法没,先这样用了。

爬虫定义好之后,Scrapy会自动调用配置的pipeline,将item对象传入,管道会执行写文件操作。

在items.py中创建实例。

实例代码:

class TieBa(Item):
title = Field()
childLink = Field()
childValue = Field()

在pipelines.py中创建管道。

管道:


class JsonWithEncodingPipeline(object):
def __init__(self):
self.file = codecs.open(‘tieba.json‘,‘wb‘,encoding=‘utf-8‘)

def process_item(self,item,spider):
line = json.dumps(dict(item)) + "\n"
self.file.write(line.encode(‘gbk‘).decode("unicode_escape"))
return item

def spider_closed(self, spider):
self.file.colse()

在settings.py中配置管道信息。

管道的配置:

ITEM_PIPELINES = {
‘tutorial.pipelines.JsonWithEncodingPipeline‘ :300
}

python学习(二)百度爬虫0.1,布布扣,bubuko.com

时间: 2024-08-08 14:09:11

python学习(二)百度爬虫0.1的相关文章

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具 爬虫工程师必备的10个爬虫工具! 最近很多学爬虫的伙伴让推荐顺手的爬虫工具,总结了一下,把这些好用的爬虫工具都跟你们找齐活了! 磨刀不误砍柴工!都知道工欲善其事必先利其器,那么作为经常要和各大网站做拉锯战的爬虫工程师们,更需要利用利用好身边的一切法器,才能更快的攻破对方防线.这里以日常爬虫流程,给大家介绍十款爬虫工具,相信大家掌握以后,工作效率提高是完全没有问题了! 大家也可以看看有你们

[Python学习] 简单网络爬虫抓取博客文章及思想介绍

        前面一直强调Python运用到网络爬虫方面非常有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简单介绍下Python是如何爬去网络数据的,文章知识非常简单,但是也分享给大家,就当简单入门吧!同时只分享知识,希望大家不要去做破坏网络的知识或侵犯别人的原创型文章.主要包括: 1.介绍爬取CSDN自己博客文章的简单思想及过程 2.实现Python源码爬取新浪韩寒博客的316篇文章 一.爬虫的简单思想      最近看刘兵的<Web数据挖掘>知道,在研

python学习笔记之爬虫之爬取百度贴吧某一帖子

从大神这儿静觅 ? Python爬虫实战二之爬取百度贴吧帖子讲的很不错,按照步骤一步一步的做效果很明显.第一次真正做出一个小爬虫程序,所以在csdn写出来也是对自己的一种鞭策一种鼓励,不喜勿喷,还请大神不吝赐教. 因为大神博文讲的很详细(真心详细),所以步骤我就不一一细说了 先把自己的代码贴出来(大部分一样): #!/usr/bin/env python # coding=utf-8 import urllib2 import urllib import re class Tool(object

【python学习】网络爬虫——爬百度贴吧帖子内容

很久以前,很喜欢泡贴吧,因为那里有自己牵挂的人和事 一转眼过去好多年了...... 一个简单的学习爬虫的例子,爬百度贴吧帖子内容 代码如下: # -*- coding:utf-8 -*- #import urllib import urllib2 import re #功能性类,过滤掉html标签的类 class Tool:     #去除img标签,7位长空格     removeImg = re.compile('<img.*?>| {7}|')     #删除超链接标签     remo

python学习之html从0开始(二)

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>页面1</title> </head> <body> 默认<select>:<select> <option value="1

Python学习 —— 实现简单爬虫

为了加快学习python3.x于是直接看了许多有实际操作的小项目,查了许多资料后写了这个脚本,这个脚本主要是爬取百度图片'东方幻想乡'的图片,但发现有几个问题: 1.图片会重复两次. 2.图片只有81张,只匹配了fm=27的图片... 下面给出代码: from urllib import request import re class CrawlJPG: #定义一个爬取图片的类 def __init__(self): # 构造函数 print('Link start!') def __GetHt

python学习笔记:&quot;爬虫+有道词典&quot;实现一个简单的英译汉程序

1.有道的翻译 网页:www.youdao.com Fig1 Fig2 Fig3 Fig4 再次点击"自动翻译"->选中'Network'->选中'第一项',如下: Fig5 然后显示出如下内容,红框画出的部分是等会编写代码需要的地方: Fig6 Fig7 再看看翻译的结果: Fig8 2.python实现英译汉: 原理:把需要翻译的内容输入给有道词典,然后通过程序把翻译的结果爬下来. 1 # -*- coding:utf-8 -*- 2 """