国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

scrapy爬蟲爬取多網頁內容

這篇具有很好參考價值的文章主要介紹了scrapy爬蟲爬取多網頁內容。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

摘要:此案例是爬取目標網站(https://tipdm.com/)的新聞中心板塊的公司新聞中所有新聞的標題、發(fā)布時間、訪問量和新聞的文本內容。

1. 創(chuàng)建scrapy項目

我使用的是 Anaconda prompt
我們使用如下命令創(chuàng)建scrapy項目:scrapy startproject spider_name 爬蟲路徑

spider_name是項目的名字
爬蟲路徑就是項目所在位置

本案例內命令是:scrapy startproject mySpider 路徑

2. 生成爬蟲器

我們先生成 spider(爬蟲器) 文件:scrapy genspider spider_name domain

  1. spider_name:是生成的 爬蟲器的名字,在目錄spiders 下面
  2. domain:是要爬取的網站的域名(一般是不加http,只寫www.xxx.com就行)

本案例內,命令是scrapy genspider msd www.tipdm.com

3. 指定爬取字段(items.py)

指定要爬取的內容都有什么,我們在摘要中已經說明,要爬取的是 所有新聞的標題、發(fā)布時間、訪問量和新聞的文本內容
所以有四個字段,代碼如下:

import scrapy

class MyspiderItem(scrapy.Item):
    title = scrapy.Field()
    time = scrapy.Field()
    view = scrapy.Field()
    text = scrapy.Field()

4. 編寫爬蟲文件(msd.py)

我們要爬取的是:所有頁面的、所有新聞的內容。
所以我們寫三個parse函數(shù)。

  1. parse:得到頁數(shù),并得到每頁的網址,傳給下個函數(shù)
  2. parse_url:得到每個頁面的所有新聞的鏈接
  3. parse_text:分析得到的新聞界面的內容,并存入 item 中,返回回去

注意:將 start_url 修改成第一個要爬取的頁面,即公司新聞的頁面

(代碼中注釋掉的內容都是調試用的)

parse函數(shù)

先得到總頁數(shù),因為取出來的是 str,將其轉成int類型。
通過取出各個頁面可知,每個頁面的網址類似,只有數(shù)字不同,我們就可以生成網址了。
然后使用 yield Request() 回調下一個函數(shù)。
現(xiàn)在還不太懂原理。yield ,并不會直接返回,而是會返回一個生成器,可以遍歷完所有的網頁再統(tǒng)一返回

    def parse(self, response):
        number = int(response.xpath('//*[@id="t251"]/div[6]/div/a[6]/text()').extract()[0]) # 總頁數(shù)
        url_all = ['http://www.tipdm.com/gsxw/index_{}.jhtml'.format(i) for i in range(1, number + 1)]
        
        for i in url_all:
            yield Request(url=i, callback=self.parse_url, dont_filter=True)

parse_url

得到單個頁面中的所有新聞的網址,放在一個列表中
注意:這里被卡了好久,就是因為得到的網址是不完整的,沒有前綴(http之類的)一直進不到下一個函數(shù)(可以在每個函數(shù)寫一個輸出語句,以便檢查是否進入了函數(shù))
所以我們將url補充完畢,進行回調
爬取不出來的時候,一定要輸出一下網址看看

    def parse_url(self, response):
        urls = response.xpath('//*[@id="t251"]/div/div[3]/h1/a/@href').extract()
        for i in urls:
            yield Request(url=('http://www.tipdm.com' + i), callback=self.parse_text, dont_filter=True)

parse_text

本函數(shù)是分析新聞的內容的函數(shù),并存儲在item中返回
有個很尷尬的點是這個網站的前端有點亂,有幾條新聞的文本內容的xpath路徑和其他的都不一樣,好麻煩的,現(xiàn)在還不知道怎么解決

    def parse_text(self, response):
        item = MyspiderItem()
        item['title'] = response.xpath('/html/body/div[2]/div/div[1]/div[2]/h1/text()').extract()  # title
        item['time'] = response.xpath('/html/body/div[2]/div/div[1]/div[2]/div/div[1]/span[1]/text()').extract()  # time
        item['view'] = response.xpath('/html/body/div[2]/div/div[1]/div[2]/div/div[1]/span[3]/text()').extract()  # view
        item['text'] = '\n'.join(response.xpath('/html/body/div[2]/div/div[2]/p/text()').extract())
        if item['text'] == '':
            item['text'] = '\n'.join(response.xpath('/html/body/div[2]/div/div[2]/p/span/text()').extract())
            if item['text'] == '':
                item['text'] = '\n'.join(response.xpath('/html/body/div[2]/div/div[2]/section[2]/section/section[2]/section[2]/p/span/text()').extract())
        return item

完整代碼

import scrapy
from scrapy.http import Request
from mySpider.items import MyspiderItem


class MsdSpider(scrapy.Spider):
    name = 'msd'
    allowed_domains = ['www.tipdm.com']
    start_urls = ['http://www.tipdm.com/gsxw/index.jhtml']

    def parse(self, response):
        number = int(response.xpath('//*[@id="t251"]/div[6]/div/a[6]/text()').extract()[0]) # 總頁數(shù)
        url_all = ['http://www.tipdm.com/gsxw/index_{}.jhtml'.format(i) for i in range(1, number + 1)]

        for i in url_all:
            # print('1111111111111111')
            yield Request(url=i, callback=self.parse_url, dont_filter=True)
            # print(i)

    def parse_url(self, response):
        urls = response.xpath('//*[@id="t251"]/div/div[3]/h1/a/@href').extract()
        # print('22222222222222222222')
        for i in urls:
            yield Request(url=('http://www.tipdm.com' + i), callback=self.parse_text, dont_filter=True)

    def parse_text(self, response):
        # print('77')
        item = MyspiderItem()
        # print('78')
        item['title'] = response.xpath('/html/body/div[2]/div/div[1]/div[2]/h1/text()').extract()  # title
        # print('7999')
        item['time'] = response.xpath('/html/body/div[2]/div/div[1]/div[2]/div/div[1]/span[1]/text()').extract()  # time
        item['view'] = response.xpath('/html/body/div[2]/div/div[1]/div[2]/div/div[1]/span[3]/text()').extract()  # view
        item['text'] = '\n'.join(response.xpath('/html/body/div[2]/div/div[2]/p/text()').extract())
        if item['text'] == '':
            item['text'] = '\n'.join(response.xpath('/html/body/div[2]/div/div[2]/p/span/text()').extract())
            if item['text'] == '':
                item['text'] = '\n'.join(response.xpath('/html/body/div[2]/div/div[2]/section[2]/section/section[2]/section[2]/p/span/text()').extract())
        # print('79')
        return item

5. 存儲數(shù)據(jù)(pipelines.py、settings.py)

我們選擇使用pipelines存儲,需要在settings文件中取消相應代碼注釋

settings.py

ITEM_PIPELINES = {
   'mySpider.pipelines.MyspiderPipeline': 300,
}

pipelines.py

因為我選擇存儲為.csv文件,所以需要導入pandas
注意to_csv中,參數(shù)順序不能亂

其中,參數(shù)的順序如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-419818.html

  1. filename: 文件名,必需。
  2. index: 是否寫入行索引,可選。默認為False。
  3. encoding: 字符編碼,可選。默認為utf-8-sig
  4. compression: 壓縮模式,可選。默認為gzip。
  5. header: 表頭是否寫入,可選。默認為None
  6. footer: 表尾是否寫入,可選。默認為None。
  7. newline: 換行符,可選。默認為None。
  8. dtype: 數(shù)據(jù)類型,可選。默認為None。
  9. optimizer: 優(yōu)化器,可選。默認為None
  10. 寫入文件的寫入器對象: 寫入文件的寫入器對象,可選。默認為None。
  11. 寫入文件的參數(shù): 寫入文件的參數(shù),可選。默認為None。
    需要注意的是,headerfooter參數(shù)默認為None,表示不寫入表頭和表尾。如果希望寫入表頭或表尾,可以設置該參數(shù)為True。
import pandas as pd
from itemadapter import ItemAdapter

class MyspiderPipeline:
    def process_item(self, item, spider):
        data = pd.DataFrame(dict(item))
        data.to_csv('data2.csv', mode='a+', index=None, encoding='utf-8-sig', header=None)
        return item

到了這里,關于scrapy爬蟲爬取多網頁內容的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 爬蟲學習筆記-scrapy爬取電影天堂(雙層網址嵌套)

    爬蟲學習筆記-scrapy爬取電影天堂(雙層網址嵌套)

    ? 1.終端運行scrapy startproject movie,創(chuàng)建項目 2.接口查找 ?3.終端cd到spiders,cd scrapy_carhome/scrapy_movie/spiders,運行?scrapy genspider mv https://dy2018.com/ 4.打開mv,編寫代碼,爬取電影名和網址 5.用爬取的網址請求,使用meta屬性傳遞name?,callback調用自定義的parse_second 6.導入ScrapyMovieItem,將movie對象

    2024年02月19日
    瀏覽(27)
  • 網絡爬蟲丨基于scrapy+mysql爬取博客信息

    網絡爬蟲丨基于scrapy+mysql爬取博客信息

    本期內容 :基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫中 實驗需求 anaconda丨pycharm python3.11.4 scrapy mysql 項目下載地址:https://download.csdn.net/download/m0_68111267/88740730 本次實驗實現(xiàn)了:使用Scrapy框架爬取博客專欄的目錄信息并保存到MySQL數(shù)據(jù)庫中,實驗主要涉及到Python的爬蟲技術以

    2024年03月18日
    瀏覽(20)
  • Python爬蟲之Scrapy框架系列(23)——分布式爬蟲scrapy_redis淺實戰(zhàn)【XXTop250部分爬取】

    先用單獨一個項目來使用scrapy_redis,講解一些重要點!

    2024年02月16日
    瀏覽(24)
  • scrapy框架簡單實現(xiàn)豆瓣評分爬取案例

    scrapy框架簡單實現(xiàn)豆瓣評分爬取案例

    豆瓣網址:https://movie.douban.com/top250 在spiders目錄下創(chuàng)建一個spider_one.py文件,可以隨意命名,該文件主要是讓我們進行數(shù)據(jù)爬取的。 運行命令: 注意末尾的域名是用來設置爬取的范圍的 spider_one.py代碼如下 放開useragent,配置好對應的值 關閉robots協(xié)議 放開管道限制 在items.py文

    2024年02月14日
    瀏覽(17)
  • 使用PyCharm編寫Scrapy爬蟲程序,爬取古詩詞網站

    使用PyCharm編寫Scrapy爬蟲程序,爬取古詩詞網站

    本次測試案例參考廈門大學數(shù)據(jù)庫實驗室 鏈接: https://dblab.xmu.edu.cn/blog/3937/ 在PyCharm中新建一個名稱為“scrapyProject”的工程,如下圖所示,Python解釋器就選擇我們之前已經安裝好的 本次測試環(huán)境為 Python3.7.6 在“scrapyProject”工程底部打開Terminal窗口(如下圖所示),在命令提示

    2024年02月11日
    瀏覽(25)
  • 網絡爬蟲丨基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫中

    網絡爬蟲丨基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫中

    本期內容 :基于scrapy+mysql爬取博客信息并保存到數(shù)據(jù)庫中 實驗需求 anaconda丨pycharm python3.11.4 scrapy mysql 項目下載地址:https://download.csdn.net/download/m0_68111267/88740730 本次實驗實現(xiàn)了:使用Scrapy框架爬取博客專欄的目錄信息并保存到MySQL數(shù)據(jù)庫中,實驗主要涉及到Python的爬蟲技術以

    2024年01月17日
    瀏覽(21)
  • Scrapy爬蟲框架集成Selenium來解析動態(tài)網頁

    Scrapy爬蟲框架集成Selenium來解析動態(tài)網頁

    當前網站普遍采用了javascript 動態(tài)頁面,特別是vue與react的普及,使用scrapy框架定位動態(tài)網頁元素十分困難,而selenium是最流行的瀏覽器自動化工具,可以模擬瀏覽器來操作網頁,解析元素,執(zhí)行動作,可以處理動態(tài)網頁,使用selenium處理1個大型網站,速度很慢,而且非常耗資

    2024年02月15日
    瀏覽(26)
  • 爬蟲學習筆記-scrapy鏈接提取器爬取讀書網鏈接寫入MySQL數(shù)據(jù)庫

    爬蟲學習筆記-scrapy鏈接提取器爬取讀書網鏈接寫入MySQL數(shù)據(jù)庫

    1.終端運行scrapy startproject scrapy_read,創(chuàng)建項目 2.登錄讀書網,選擇國學(隨便點一個) 3.復制鏈接(后面修改為包括其他頁) ?4.創(chuàng)建爬蟲文件,并打開 ?5.滑倒下方翻頁處,右鍵2,點擊檢查,查看到a標簽網址,復制 6.修改爬蟲文件規(guī)則allow(正則表達式),\\\'d\\\'表示數(shù)字,\\\'+\\\'表示多個,\\\'.\\\'使\\\'.\\\'生效

    2024年02月19日
    瀏覽(27)
  • selenium爬取網頁內容,對網頁內容進行點擊

    selenium爬取網頁內容,對網頁內容進行點擊

    所需要的庫 首先明確所要爬取的網頁,選擇調用方法,增加無界面模式的無頭參數(shù),然后調用,獲取網址,使頁面放大,為最大化窗口 獲取數(shù)據(jù)運用XPATH函數(shù),將獲取的數(shù)據(jù)作為item,運用XPATH函數(shù)獲取, ? 模仿人點擊下一頁,運用 for語句,每10個一點,停留5秒 同樣尋找下一

    2024年01月17日
    瀏覽(27)
  • 爬蟲——Scrapy框架 (初步學習+簡單案例)

    目錄 1.scrapy基本用途: 2.結構: 3.scrapy文件結構(示例:game) 4.scrapy安裝 二、?簡單實例 1.創(chuàng)建項目(打開命令窗口) 2.打開項目? 一、Scrapy框架 1.scrapy基本用途: Scrapy是一個快速、高效率的網絡爬蟲框架,用于抓取web站點并從頁面中提取結構化的數(shù)據(jù)。 Scrapy被廣泛用于數(shù)據(jù)

    2024年02月12日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包