scrapy 解析css,Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段...
上次我們介紹了scrapy的安裝和加入debug的main文件,這次重要介紹創建的爬蟲的基本爬取有用信息
通過命令(這篇博文)創建了jobbole這個爬蟲,并且生成了jobbole.py這個文件,又寫了xpath和css的基本用法的博文
首先分析網頁的結構和抓取流程:
1,下載start_urls,交給parse方法處理
2,parse處理,從中獲取本頁的文章url(以后獲取到文章首圖傳遞個自定義的parse_detail),和下一頁的url
3,將下一頁的url交給parse方法。繼續進行1和2;將文章url傳遞給自定義的解析函數parse_detail
4,parse方法對下一頁的url進行下載,自定義的parse_detial則通過css或者xpath 解析有用的信息傳遞給Item,次數兩個操作是異步操作
以下是源碼:
# -*- coding: utf-8 -*-
import scrapy
import re
from scrapy.http import Request
class JobboleSpider(scrapy.Spider):
name = "jobbole"
allowed_domains = ["blog.jobbole.com"]
start_urls = ['http://blog.jobbole.com/all-posts/']
def parse(self, response):
'''
進行兩部操作:1,從頁面抓取所有的文章url交給解析器進行解析這個頁面的標題時間點贊數等
2,從頁面抓取下一個頁面的url 進行下載
'''
#從網頁提取文章的URL,交給scrapy下載,并傳遞給parse_detail解析
#css_urlsresponse.css('#archive .floated-thumb .post-thumb a ::attr(href)').extract()
post_urls = response.xpath('/html/body/div[1]/div[3]/div/div/a/@href').extract()
for url in post_urls:
#同過scrapy的Request()下載,并且交給自定義的parse_detail解析
#注意:在這里從網頁上解析的url是全的url,不需要拼接,若不全則需要進行拼接
#拼接通過 urllib庫的parse中的urljoin("http://blog.jobbole.com/","110769")函數進行拼接
yield Request(url,callback=self.parse_detail)
#從網頁獲取下一頁
#css_next_url = response.css('.next.page-numbers::attr(href)').extract_first()
next_url = response.xpath('/html/body/div[1]/div[3]/div[21]/a[4]/@href').extract_first()
if next_url:
yield Request(next_url,callback=self.parse)
def parse_detail(self,response):
#//*[@id="post-110769"]/div[1]/h1
#re_selector = response.xpath('//*[@id="post-110769"]/div[1]/h1/text()')
#re2_selector = response.xpath('/html/body/div[3]/div[1]/h1/text()')
#re3_selector = response.xpath('//div[@class="entry-header"]/h1/text()')
#xpath()中的 text()函數是去除html,查看d標簽外的 data的內容
title = response.xpath('/html//div[@class="entry-header"]/h1/text()')
#xpath()中的extracr()函數作用:將xpath()函數產生的Selector xpath對象的內容,并且以列表的對象返回;其他事去除空格和點號不必要的字符
add_time=response.xpath('/html//p[@class="entry-meta-hide-on-mobile"]/text()').extract()[0].strip().replace("·","")
#文章點贊人數,contains() 是xpath()的內置函數用法,找出在span中class屬性包含'vote-post-up'字符串的標簽
like = response.xpath('//span[contains(@class,"vote-post-up")]/h10/text()').extract()[0]
#文章收藏人數:fav_num xpath解析 10收藏 re再解析 為:10
fav_temp = response.xpath('//span[contains(@class,"bookmark-btn")]/text()').extract()[0]
re_fav_num = re.match(".*(\d+).*",fav_temp)
if re_fav_num:
fav_num = int(re_fav_num.group(1))
else:
fav_num = 0
#文章評論人數:解析同收藏人數
comment_temp = response.xpath('//span[@class="btn-bluet-bigger href-style hide-on-480"]/text()').extract()[0]
re_comment = re.match(".*(\d+).*",comment_temp)
if re_comment:
comment_num = int(re_comment.group(1))
else:
comment_num = 0
#文章內容,簡單提取,不太復雜的,不深入研究
content = response.xpath('//div[@class="entry"]').extract()[0]
#標簽:涉及去重評論
temp_tag = response.xpath('/html//p[@class="entry-meta-hide-on-mobile"]/a/text()')
tag_list = [x for x in tag if not x.strip().endswith("評論") ]
tags = ";".join(tag_list)
pass
'''
#通過css選擇器提取數據
#提取標題 .后面跟的代表的是class的屬性
css_title = response.css(".entry-header h1::text").extract()[0]
#添加時間 提取p標簽的class的唯一值為entry-meta-hide-on-mobile屬性的標簽,::text是提取其內容,與text()相似
css_add_time =response.css("p.entry-meta-hide-on-mobile::text").extract()[0].strip().replace("·","")
#點贊人數:class 屬性為vote-post-up 的唯一的標簽
css_like = response.css(".vote-post-up h10::text").extract()[0]
#文章收藏人數,對于數組來說按索引提取有風險,所有需要異常捕獲操作,extract_first()就是對其進行異常操作,保證列表為空時不報錯
css_fav_temp = response.css(".bookmark-btn::text").extract_first()
re_fav_num = re.match(".*(\d+).*",fav_temp)
if re_fav_num:
css_fav_num = re_fav_num.group(1)
#文章評論人數
re_comment = response.css('a[href="#article-comment"] span::text').extract_first()("0")
if re_comment:
comment_num = re_comment.group(1)
#標簽:涉及去重評論
temp_tag = response.css('p[class="entry-meta-hide-on-mobile"] a::text').extract()
tag_list = [x for x in tag if not x.strip().endswith("評論") ]
tags = ";".join(tag_list)
'''
爬蟲實戰——Scrapy爬取伯樂在線所有文章
Scrapy簡單介紹及爬取伯樂在線所有文章 一.簡說安裝相關環境及依賴包 1.安裝Python(2或3都行,我這里用的是3) 2.虛擬環境搭建: 依賴包:virtualenv,virtualenvwr ...
python爬蟲scrapy框架——爬取伯樂在線網站文章
一.前言? 1. scrapy依賴包: 二.創建工程 1. 創建scrapy工程: scrapy staratproject ArticleSpider 2. 開始(創建)新的爬蟲: cd Artic ...
Scrapy爬取伯樂在線的所有文章
本篇文章將從搭建虛擬環境開始,爬取伯樂在線上的所有文章的數據. 搭建虛擬環境之前需要配置環境變量,該環境變量的變量值為虛擬環境的存放目錄 1.?配置環境變量 2.創建虛擬環境 用mkvirtualen ...
第三天,爬取伯樂在線文章代碼,編寫items.py,保存數據到本地json文件中
一. 爬取http://blog.jobbole.com/all-posts/中的所有文章 ? ? 1. 編寫jobbole.py簡單代碼 import scrapy from scrapy. ...
Scrapy爬取伯樂在線文章
首先搭建虛擬環境,創建工程 scrapy startproject ArticleSpider cd ArticleSpider scrapy genspider jobbole blog.jobbo ...
爬取伯樂在線文章(五)itemloader
ItemLoader 在我們執行scrapy爬取字段中,會有大量的CSS或是Xpath代碼,當要爬取的網站多了,要維護起來很麻煩,為解決這類問題,我們可以根據scrapy提供的loader機制. 導入 ...
爬取伯樂在線文章(四)將爬取結果保存到MySQL
Item Pipeline 當Item在Spider中被收集之后,它將會被傳遞到Item Pipeline,這些Item Pipeline組件按定義的順序處理Item. 每個Item Pipeline ...
爬取伯樂在線文章(二)通過xpath提取源文件中需要的內容
爬取說明 以單個頁面為例,如:http://blog.jobbole.com/110287/ 我們可以提取標題.日期.多少個評論.正文內容等 Xpath介紹 1. xpath簡介 (1) xpath使 ...
scrapy爬取伯樂在線文章數據
創建項目 切換到ArticleSpider目錄下創建爬蟲文件 設置settings.py爬蟲協議為False 編寫啟動爬蟲文件main.py
隨機推薦
Solution for Error FRM-92095: Oracle Jnitiator version too low
Solution for Error FRM-92095: Oracle Jnitiator version too low By Pan.Tian on 六月 04, 2013 Symtom: Af ...
[AngularJS] AngularJS系列(1) 基礎篇
目錄 什么是AngularJS? 為什么使用/ng特性 Hello World 內置指令 內置過濾器 模塊化開發 一年前開始使用AngularJS(以后簡稱ng),如今ng已經出2了.雖說2已完全變樣 ...
使用PuTTY在Windows中向Linux上傳文件
為了防止無良網站的爬蟲抓取文章,特此標識,轉載請注明文章出處.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3843207.html ...
Palindrome Subarrays
給定輸入字符串,要求判斷任意子字符串是否對稱. 基本思路就是DP 寫出DP表達式為 dp[i][j] = dp[i + 1][j - 1] && (s[i] == s[j]) dp[i ...
在Windows 10中使用內置的SSH Client連接遠程的Linux虛擬機
無意中發現這個功能.一直以來,在Windows平臺上面要通過SSH連接Linux都需要借助第三方工具,而且往往還不是很方便.但其實在去年12月份的更新中,已經包含了一個beta版本的SSH Clien ...
json數組
js ...WebSphere的jython編碼的一個坑
was5.1版本,用"name=" in line這類判斷字符串包含的方式時,系統會提示報錯 TypeError: string member test needs char le ...
ReactiveX 學習筆記(16)RxPY
RxPY RxPY 是 ReactiveX 的 Python語言實現. # 安裝 RxPY $ pip3 install rx Successfully installed rx-1.6.1 Basi ...
[轉]php cli命令 自定義參數傳遞
FROM :http://www.cnblogs.com/zcy_soft/archive/2011/12/10/2283437.html 所有的PHP發行版,不論是編譯自源代碼的版本還是預創建的版本 ...
總結
以上是生活随笔為你收集整理的scrapy 解析css,Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业级服务器固态硬盘,用户如何选择企业级
- 下一篇: ajax请求获取服务器数据,jquery