日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapy 解析css,Scrapy基础(六)————Scrapy爬取伯乐在线一通过css和xpath解析文章字段...

發布時間:2024/8/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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解析文章字段...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。