做爬虫爬取当前网页内容项目,爬取的目标网页每一页都有广告,怎么过滤掉啊

我知道如果用php写网络爬虫自动抓取网页内容,那可以用现成函数,有url做参数就可以抓取到网页所有内容然后正则提取需要的内容。
那javascript有没有这种功能,例如我想在我自己的电脑上抓取大量网站,本机又无服务器环境,能否用js实现????有无类似功能?
如果给js一个url,它能否通过它抓取出这个页面的内容?
听说有类似ff插件,js写的能实现。具体不知道什么原理。
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
用Node.js做后端,http模块提供了获取网页的功能,然后你要做的就是分析其中的链接,然后继续抓取数据,示例代码如下:
var http = require('http');
var options = {
host: 'www.',
path: '/',
method: 'GET'};
var req = http.get(options, function(res) {
var pageData = "";
res.setEncoding('UTF-8');
res.on('data', function (chunk) {
pageData +=
res.on('end', function(){
console.log(pageData);
//这里处理抓取到的数据
不需要Firefox插件,需要Service-Side Javascrtip才能完成这样的功能。
可能,但是不现实。
首先一个爬虫需要能将爬取的内容进行归档和保存,JS没有直接的接口可以操作本地文件或者数据库,虽然可以通过flash或者firefox插件间接访问本地文件,但是也存在很多限制。
其次JS有安全限制,跨域的URL是无法直接访问的,也可以通过一些间接手段弥补,但非常麻烦
最后,爬虫需要有健壮的接口,还要考虑多并发高性能。JS只能通过计时器模拟多并发,而且非常容易内存泄漏,JS的爬虫很可能跑几个小时内存就满了,却没有办法回收。
爬虫还是建议考虑用C++这样的高性能语言,脚本语言可以考虑Python实现的,JS用来玩玩可以
首先,楼主意识上认为的是客户端脚本获取Javascript分两种编程
客户端脚本(常用Web开发客户端脚本)
服务端脚本(Node.js)
楼主要记得客户端脚本跨域是有限制的,如果想抓站 还是要借助后台实现,楼主现在可以用php 并不一定要用服务器,win下举例:php_path:\php.exe work_path\run.php这样也是可以跑脚本的如果想要结果输出也可以php_path:\php.exe work_path\run.php &out_path\result.txt
楼主想用的是工具脚本而非Web应用所以并不一定要借助服务器
我分别用过三种方式写过一些简单的爬虫, 下面是我对爬虫的理解和方法的总结(欢迎大家纠正和补充):
使用任何语言的http库(比如python的urllib2, 或者使用支持连接池的urllib3来提升效率), 外加解析html的库(比如python的beautifulsoup). 使用urllib来模拟get/post请求,从而抓取网页, 再通过解析html的库来获取需要抓取的内容. 能够得到一个页面的内容, 就可以通过url得到所有页面的内容.优点: 直接, 快速, 占用资源少, 可以多个进程/线程一起跑, 可以在命令行完成缺点: 这种方式的致命缺点是, 让遇到页面是通过js动态渲染或者通过ajax动态加载的内容, 则很难得到该页面的内容了. 这种情况下还需要js解释器(也可以说是浏览器)来进一步解析, 来得到想得到的内容.PS: 在遇到ip限制的时候可以设置代理.
使用firefox/chrome浏览器插件的方式(也就是javascript+浏览器的方式做爬虫)使用firefox的插件, 就不存在跨域访问提交的问题了. 这里是我去年写过的一个简单的firefox插件, 比较粗糙, 但是基本的流程是通的. 基本原理就是使用浏览器加载页面后, 用javascript/jquery来模拟点击等事件, 获取相应的内容, 然后post到远程服务器的url, 进行处理和保存. 或者写入浏览器本地的存储(比如sqlite)优点: 直观, 纯js实现, 方便使用jquery, 易于调试, 解决了方法1的动态内容渲染问题, 可以和浏览器交互, 容易解决验证码输入等限制缺点: 必须依赖本地浏览器, 速度慢, 比起方法1耗资源, 比较难多进程/线程, 或多或少的需要认为干预(因为我的代码写的不够好...)
第三种方法使用一个叫做的神器, 它是一个支持多语言接口的库, 通过它可以使用java/python/ruby等语言来操作浏览器(firefox/chrome等)来完成任务,通常用于前端代码的测试. 用这种方法写的爬虫, 还是通过python/java等语言来写主体结构(分析修改数据,存入数据库等等), 并通过selenium的js/jquery接口, 完成对网页内容的渲染和触发.优点: 结合了方法1,2的大部分优点.
1、基于web browser的无法实现,因对跨域访问限制,这个就不细说了,资料一大堆。
2、如果是本地宿主HOST,权限上是可以的,比如HTA(HTML Application)可以直接调用XMLHTTP、WinHttp等组件实现,特别值得一说的是WinHttp.WinHttpRequest所有php curl支持的它都支持。
可以,但是要想办法解决跨域访问的问题。我已经实现了用JS才做爬虫。流程很简单:自己的建了一个WEB项目作为爬虫,通过访问自己的项目,并让在项目页面中以iframe方式打开目标网址,用项目中的JS代码操作iframe中的页面,并把抓取到的数据通过ajax或普通请求提交到自己的服务器。
至于怎么解决跨域问题,我是借助了apache的代理实现了,比如:把指向127.0.0.1,然后通过apache代理,把/js_robot_hello_world指向自己的项目,其他请求正常指向/相应的子目录
就可以实现了。
可以,我以前用JS写了个采集软件,速度还行!!
用C#也可以实现爬虫,用js脚步个人感觉非常麻烦
用node.js 与phantomjs可以实现。
试着访问到网站之后,js用获取正文等算法,然后form表单提交到服务器去。
我又要说了,nodejs 和 js 不一样!node为了解决高io高并发的问题而生的。不过正好用了js语言,放v8里跑而已。所以我一直认为,js就是放浏览器里跑的,nodejs是服务器上的。别搞混了。爬虫是要有爬虫的节操的好么?有写网站已经设置了不让爬,你也要做到不爬。
这个放在浏览器里明显不现实,首先你怎么跨域?其次如何做到爬虫的节操?有人说用jsonp,有些人是不是一遇到跨域就说jsonp啊,先去看看jsonp的定义和实现细节好么。当然了,你硬要做,也是可以的,楼上好多为了用js而js的。但是何必呢,用iframe来,这是有多麻烦,要监听iframe里面dom ready,要搞一堆和爬虫本身无关的事情。关键在于,你一定要在浏览器里跑,但是脱离不了服务器端的配合,甚至还有路由之类的奇奇怪怪的事情。
如果你硬要用js语法来写这个东西,就用nodejs,放服务器上跑。然后这样和php什么的有什么区别么 …… 不过语法不同而已。
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (30873) 次Python爬虫框架Scrapy实战之批量抓取招聘信息
作者:HanTangSongMing
字体:[ ] 类型:转载 时间:
网络爬虫又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者,是按照一定的规则,自动抓取万维网信息的程序或者脚本。这篇文章主要介绍Python爬虫框架Scrapy实战之批量抓取招聘信息,有需要的朋友可以参考下
网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面。Scrapy是纯Python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便~
&& Scrapy 使用wisted这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。整体架构如下图所示:
&&& 绿线是数据流向,首先从初始URL 开始,Scheduler 会将其交给 Downloader 进行下载,下载之后会交给 Spider 进行分析,Spider分析出来的结果有两种:一种是需要进一步抓取的链接,例如之前分析的“下一页”的链接,这些东西会被传回 Scheduler ;另一种是需要保存的数据,它们则被送到Item Pipeline 那里,那是对数据进行后期处理(详细分析、过滤、存储等)的地方。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。
我假定你已经安装了Scrapy。假如你没有安装,你可以参考这篇文章。
在本文中,我们将学会如何使用Scrapy建立一个爬虫程序,并爬取指定网站上的内容
1. 创建一个新的Scrapy Project
2. 定义你需要从网页中提取的元素Item
3.实现一个Spider类,通过接口完成爬取URL和提取Item的功能
4. 实现一个Item PipeLine类,完成Item的存储功能
我将会用腾讯招聘官网作为例子。
Github源码:
目标:抓取腾讯招聘官网职位招聘信息并保存为JSON格式。
首先,为我们的爬虫新建一个工程,首先进入一个目录(任意一个我们用来保存代码的目录),执行:
scrapy startprojectitzhaopin
最后的itzhaopin就是项目名称。这个命令会在当前目录下创建一个新目录itzhaopin,结构如下:
├── itzhaopin
│&& ├── itzhaopin
│&& │&& ├── __init__.py
│&& │&& ├── items.py
│&& │&& ├── pipelines.py
│&& │&& ├── settings.py
│&& │&& └── spiders
│&& │&&&&& └── __init__.py
│&& └── scrapy.cfg
scrapy.cfg: 项目配置文件
items.py: 需要提取的数据结构定义文件
pipelines.py:管道定义,用来对items里面提取的数据做进一步处理,如保存等
settings.py: 爬虫配置文件
spiders: 放置spider的目录
在items.py里面定义我们要抓取的数据:
from scrapy.item import Item, Field
class TencentItem(Item):
name = Field()
# 职位名称
catalog = Field()
# 职位类别
workLocation = Field()
# 工作地点
recruitNumber = Field()
# 招聘人数
detailLink = Field()
# 职位详情页链接
publishTime = Field()
# 发布时间
实现Spider
Spider是一个继承自scrapy.contrib.spiders.CrawlSpider的Python类,有三个必需的定义的成员
name: 名字,这个spider的标识
start_urls:一个url列表,spider从这些网页开始抓取
parse():一个方法,当start_urls里面的网页抓取下来之后需要调用这个方法解析网页内容,同时需要返回下一个需要抓取的网页,或者返回items列表
所以在spiders目录下新建一个spider,tencent_spider.py:
import json
from scrapy.selector import Selector
from scrapy.spider import Spider
from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor as sle
from itzhaopin.items import *
from itzhaopin.misc.log import *
class TencentSpider(CrawlSpider):
name = "tencent"
allowed_domains = [""]
start_urls = [
"/position.php"
rules = [ # 定义爬取URL的规则
Rule(sle(allow=("/position.php\?&start=\d{,4}#a")), follow=True, callback='parse_item')
def parse_item(self, response): # 提取数据到Items里面,主要用到XPath和CSS选择器提取网页数据
items = []
sel = Selector(response)
base_url = get_base_url(response)
sites_even = sel.css('table.tablelist tr.even')
for site in sites_even:
item = TencentItem()
item['name'] = site.css('.l.square a').xpath('text()').extract()
relative_url = site.css('.l.square a').xpath('@href').extract()[0]
item['detailLink'] = urljoin_rfc(base_url, relative_url)
item['catalog'] = site.css('tr & td:nth-child(2)::text').extract()
item['workLocation'] = site.css('tr & td:nth-child(4)::text').extract()
item['recruitNumber'] = site.css('tr & td:nth-child(3)::text').extract()
item['publishTime'] = site.css('tr & td:nth-child(5)::text').extract()
items.append(item)
#print repr(item).decode("unicode-escape") + '\n'
sites_odd = sel.css('table.tablelist tr.odd')
for site in sites_odd:
item = TencentItem()
item['name'] = site.css('.l.square a').xpath('text()').extract()
relative_url = site.css('.l.square a').xpath('@href').extract()[0]
item['detailLink'] = urljoin_rfc(base_url, relative_url)
item['catalog'] = site.css('tr & td:nth-child(2)::text').extract()
item['workLocation'] = site.css('tr & td:nth-child(4)::text').extract()
item['recruitNumber'] = site.css('tr & td:nth-child(3)::text').extract()
item['publishTime'] = site.css('tr & td:nth-child(5)::text').extract()
items.append(item)
#print repr(item).decode("unicode-escape") + '\n'
info('parsed ' + str(response))
return items
def _process_request(self, request):
info('process ' + str(request))
return request
实现PipeLine
PipeLine用来对Spider返回的Item列表进行保存操作,可以写入到文件、或者数据库等。
PipeLine只有一个需要实现的方法:process_item,例如我们将Item保存到JSON格式文件中:
pipelines.py
from scrapy import signals
import json
import codecs
class JsonWithEncodingTencentPipeline(object):
def __init__(self):
self.file = codecs.open('tencent.json', 'w', encoding='utf-8')
def process_item(self, item, spider):
line = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(line)
return item
def spider_closed(self, spider):
self.file.close(
到现在,我们就完成了一个基本的爬虫的实现,可以输入下面的命令来启动这个Spider
scrapy crawl tencent
爬虫运行结束后,在当前目录下将会生成一个名为tencent.json的文件,其中以JSON格式保存了职位招聘信息。
部分内容如下:
{"recruitNumber": ["1"], "name": ["SD5-资深手游策划(深圳)"], "detailLink": "", "publishTime":
[""], "catalog": ["产品/项目类"], "workLocation": ["深圳"]}
{"recruitNumber": ["1"], "name": ["TEG13-后台开发工程师(深圳)"], "detailLink": "",
"publishTime": [""], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["2"], "name": ["TEG12-数据中心高级经理(深圳)"], "detailLink": "",
"publishTime": [""], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["1"], "name": ["GY1-微信支付品牌策划经理(深圳)"], "detailLink": "",
"publishTime": [""], "catalog": ["市场类"], "workLocation": ["深圳"]}
{"recruitNumber": ["2"], "name": ["SNG06-后台开发工程师(深圳)"], "detailLink": "",
"publishTime": [""], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["2"], "name": ["OMG01-腾讯时尚视频策划编辑(北京)"], "detailLink": "",
"publishTime": [""], "catalog": ["内容编辑类"], "workLocation": ["北京"]}
{"recruitNumber": ["1"], "name": ["HY08-QT客户端Windows开发工程师(深圳)"], "detailLink": "",
"publishTime": [""], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["5"], "name": ["HY1-移动游戏测试经理(上海)"], "detailLink": "", "publishTime": [""], "catalog": ["技术类"], "workLocation": ["上海"]}
{"recruitNumber": ["1"], "name": ["HY6-网吧平台高级产品经理(深圳)"], "detailLink": "", "publishTime": [""], "catalog": ["产品/项目类"], "workLocation": ["深圳"]}
{"recruitNumber": ["4"], "name": ["TEG14-云存储研发工程师(深圳)"], "detailLink": "", "publishTime": [""], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["1"], "name": ["CB-薪酬经理(深圳)"], "detailLink": "", "publishTime": [""], "catalog": ["职能类"], "workLocation": ["深圳"]}
以上全部内容就是通过Python爬虫框架Scrapy实战之批量抓取招聘信息的全部内容,希望对大家有所帮助,欲了解更多编程知识,请锁定我们的网站,每天都有新的内容发布。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Scrapy爬取自己的博客内容_python_动态网站制作指南
Scrapy爬取自己的博客内容
来源:人气:1981
python中常用的写爬虫的库有urllib2、requests,对于大多数比较简单的场景或者以学习为目的,可以用这两个库实现。我之前写过的用urllib2+BeautifulSoup做的一个抓取百度音乐热门歌曲的例子,有兴趣可以看一下。
本文介绍用Scrapy抓取我在博客园的博客列表,只抓取博客名称、发布日期、阅读量和评论量这四个简单的字段,以求用较简单的示例说明Scrapy的最基本的用法。
环境配置说明
: 14.04.2 LTSPython:Python 2.7.6Scrapy:Scrapy 1.0.3
注意:Scrapy1.0的版本和之前的版本有些区别,有些类的命名空间改变了。
执行如下命令创建一个Scrapy项目
scrapy startoject scrapy_cnblogs
创建之后查看项目的目录结构如下:
scrapy_cnblogs
├── botcnblogs
  ├── __init__.py
  ├── items.py
#用于定义抓取内容的实体
  ├── pelines.py
#处理抓取的item的管道
  ├── settings.py
#爬虫需要的配置参数在这里
└── spiders
   └── __init__.py
└── scrapy.cfg
#项目的配置文件,可以不去理会,默认即可
其中scrapy.cfg所在的目录为项目的根目录,此文件是项目的配置文件,项目建立后,此文件的内容可以不用理会。其内容如下:
[settings]
default = botcnblogs.settings
#url = http://localhost:6800/
project = botcnblogs
在items.py文件里定义在抓取网页内容中抽象出来的数据结构的定义,由于这里需要博客名称、发布日期、阅读量和评论量这四个字段,定义的Item结构如下:
from scrapy import Item,Field
#引入Item、Field
class BotcnblogsItem(Item):
# define the fields for your item here like:
title = Field()
publishDate = Field()
readCount = Field()
commentCount = Field() #评论数
在pipelines.py里对爬虫抓取到的信息(这里的信息是已经组织好的上面定义的Item对象)进行处理,官方介绍的典型的应用场景为:
清理HTML数据
验证爬取的数据(检查item包含某些字段)
查重(并丢弃)
将爬取结果保存到中
它的定义也很简单,只需要实现process_item方法即可,此方法有两个参数,一个是item,即要处理的Item对象,另一个参数是spider,即爬虫。
另外还有open_spider和close_spider两个方法,分别是在爬虫启动和结束时的回调方法。
本例中处理很简单,只是将接收的Item对象写到一个json文件中,在__init__方法中以&w+&的方式打开或创建一个item.json的文件,然后把对象反序列化为字符串,写入到item.json文件中。代码如下:
# -*- coding: utf-8 -*-
import json
class BotcnblogsPipeline(object):
def __init__(self):
self.file = open("item.json", "w+")
def process_item(self, item, spider):
record = json.dumps(dict(item), ensure_ascii=False)+"\n"
#此处如果有中文的话,要加上ensure_ascii=False参数,否则可能出现乱码
self.file.write(record)
return item
def open_spider(self, spider):
def close_spider(self, spider):
self.file.close()
setting.py是爬虫的配置文件,配置爬虫的一些配置信息,这里用到的就是设置pipelines的ITEM_PIPELINES参数,此参数配置项目中启用的pipeline及其执行顺序,以字典的形式存在,{&pipeline&:执行顺序整数}
此例中的配置如下:
SPIDER_MODULES = ['botcnblogs.spiders']
NEWSPIDER_MODULE = 'botcnblogs.spiders'
ITEM_PIPELINES = {
'botcnblogs.pipelines.BotcnblogsPipeline': 1,
准备工作都做好了,爬虫呢,爬虫在哪里实现呢,我们看到项目中有个spiders目录,里面只有一个init.py文件,没错,爬虫文件需要自己创建,就在这个目录下,这里创建一个botspider.py的文件,对网页进行解析的工作就要在这里实现了,此例中定义的爬虫类继承自CrawlSpider类。
定义一个Spider需要如下几个变量和方法实现:
name:定义spider名字,这个名字应该是唯一的,在执行这个爬虫程序的时候,需要用到这个名字。
allowed_domains:允许爬取的域名列表,例如现在要爬取博客园,这里要写成
start_urls:爬虫最开始爬的入口地址列表。
rules:如果要爬取的页面不是单独一个或者几个页面,而是具有一定的规则可循的,例如爬取的博客有连续多页,就可以在这里设置,如果定义了rules,则需要自己定义爬虫规则(以正则表达式的方式),而且需要自定义回调函数。
代码说话:
#-*- coding:utf-8 -*-
__author__ = 'fengzheng'
from scrapy.spiders import Spider, Rule
from scrapy.selector import Selector
from botcnblogs.items import BotcnblogsItem
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider
class botspider(CrawlSpider):
name = "cnblogsSpider"
#设置爬虫名称
allowed_domains = [""]
#设置允许的域名
start_urls = [
"/fengzheng/default.html?page=3",
#设置开始爬取页面
Rule(LinkExtractor(allow=('fengzheng/default.html\?page\=([\d]+)', ),),callback='parse_item',follow=True),
def parse_item(self, response):
sel = response.selector
posts = sel.xpath('//div[@id="mainContent"]/div/div[@class="day"]')
items = []
for p in posts:
#content = p.extract()
#self.file.write(content.encode("utf-8"))
item = BotcnblogsItem()
publishDate = p.xpath('div[@class="dayTitle"]/a/text()').extract_first()
item["publishDate"] = (publishDate is not None and [publishDate.encode("utf-8")] or [""])[0]
#self.file.write(title.encode("utf-8"))
title = p.xpath('div[@class="postTitle"]/a/text()').extract_first()
item["title"] = (title is not None and [title.encode("utf-8")] or [""])[0]
#re_first("posted @
10:32 风的姿态 阅读(\d+")
= p.xpath('div[@class="postDesc"]/text()').re_first(u"阅读\(\d+\)")
regReadCount = re.search(r"\d+", readcount)
if regReadCount is not None:
readcount = regReadCount.group()
item["readCount"] = (readcount is not None and [readcount.encode("utf-8")] or [0])[0]
commentcount
= p.xpath('div[@class="postDesc"]/text()').re_first(u"评论\(\d+\)")
regCommentCount = re.search(r"\d+", commentcount)
if regCommentCount is not None:
commentcount = regCommentCount.group()
item["commentCount"] = (commentcount is not None and [commentcount.encode("utf-8")] or [0])[0]
items.append(item)
return items
#self.file.close()
因为1.0版和之前的版本在包上有所改变,这里列出此例中所涉及的不同版本的区别
scrapy.spiders
scrapy.spider
CrawlSpider
scrapy.spiders
scrapy.contrib.spiders
LinkExtractor
scrapy.linkextractors
scrapy.contrib.linkextractors
scrapy.spiders
scrapy.contrib.spiders
爬虫思路:
首先进入到我的博客页面/fengzheng/,这是我的博客首页,以列表形式显示已经发布的博文,这是第一页,点击页面下面的下一页按钮,进入第二页,页面地址为/fengzheng/default.html?page=2,由此看出网站以page作为参数来表示页数,这样看来爬虫的规则就很简单了,&fengzheng/default.html\?page\=([\d]+),这个就是爬虫的规则,爬取default.html页面,page参数为数字的页面,这样无论有多少页都可以遍历到。当然,如果页面数量很少可以在start_urls列表中,将要爬取的页面都列出来,但是这样当博文数量增多就会出现问题,如下:
start_urls = [
"/fengzheng/default.html?page=1",
"/fengzheng/default.html?page=2",
"/fengzheng/default.html?page=3",
当爬取的网页具有规则定义的情况下,要继承CrawlSpider爬虫类,使用Spider就不行了,在规则定义(rules)时,如果要对爬取的网页进行处理,而不是简单的需要Url,这时,需要定义一个回调函数,在爬取到符合条件的网页时调用,并且设置follow=Ture,定义如下:
Rule(LinkExtractor(allow=('fengzheng/default.html\?page\=([\d]+)', ),),callback='parse_item',follow=True),
回调函数名称为parse_item,在parse_item方法中,就是真正要分析网页html,获取需要的内容的时候了。观察页面,查看需要的信息在什么位置,如图:  
之后,分析网页,分析出xpath
&用如下代码找到所有的class为day的div,每一个就是一个博文区域:
posts = sel.xpath('//div[@id="mainContent"]/div/div[@class="day"]')
 之后遍历这个集合,获取所需内容,其中注意一下几点:
&因为有中文内容,要对获取的内容进行encode("utf-8")编码
&由于评论数和阅读量混在一起,要对那个字符串再进行正则表达式提取 
&至此,简单的爬虫已经完成,接下来要运行这个爬虫,cd进入到爬虫项目所在的目录,执行以下命令:
scrapy crawl cnblogsSpider
会输出爬取过程信息
之后会看到,根目录中多了一个item.json文件,cat此文件内容,可以看到信息已经被提取出来:
优质网站模板

我要回帖

更多关于 java爬虫爬取动态网页 的文章

 

随机推荐