幾天沒用scrapy爬**了,正好最近在刷電影,就想著把自己常用的乙個電影分享**給爬取下來儲存到本地mongodb中
第一步仍然是建立scrapy專案與spider檔案
切換到工作目錄兩條命令依次輸入
開啟目標**(分類是2023年上映的電影),分析我們需要的資料
進入頁面是列表的形式就像豆瓣電影一樣,然後我們點進去具體頁面看看
分析完成之後就可以首先編寫 items.py檔案
import另外別忘了去settings.py中開啟 item_pipelines 選項scrapy
class
xunleidianyingitem(scrapy.item):
#define the fields for your item here like:
#name = scrapy.field()
name =scrapy.field()
information =scrapy.field()
content =scrapy.field()
downloadurl =scrapy.field()
pass
老樣子,為了方便測試我們的爬蟲,首先編寫乙個main.py的檔案方便ide呼叫
main.py:
import首先我們先測試直接向目標傳送請求是否可以得到響應scrapy.cmdline
scrapy.cmdline.execute(
'scrapy crawl xunleibt
'.split())
爬蟲檔案 xunleibt.py編寫如下:
#執行 main.py 看看會出現什麼-*- coding: utf-8 -*-
import
scrapy
class
xunleibtspider(scrapy.spider):
name = '
xunleibt
'allowed_domains = ['
']start_urls = ['
/']defparse(self, response):
(response.text)
pass
好的,發現直接返回正常的網頁也就是我們要的網頁,說明該**沒有反爬機制,這樣我們就更容易爬取了
然後通過xpath定位頁面元素,具體就不再贅述,之前的scarpy教程中都有 繼續編寫爬蟲檔案
#item爬取完成後該幹什麼?當然是入庫儲存了,編寫pipelines.py檔案進行入庫儲存-*- coding: utf-8 -*-
import
scrapy
#匯入編寫的 item
from xunleidianying.items import
xunleidianyingitem
class
xunleibtspider(scrapy.spider):
name = '
xunleibt
'allowed_domains = ['
www.xl720.com']
start_urls = ['
/']defparse(self, response):
url_list = response.xpath('
//h3//@href
').getall()
for url in
url_list:
yield scrapy.request(url,callback=self.detail_page)
nextpage_link = response.xpath('
//a[@class="nextpostslink"]/@href
').get()
ifnextpage_link:
yield scrapy.request(nextpage_link, callback=self.parse)
defdetail_page(self,response):
#切記item帶括號
bt_item =xunleidianyingitem()
bt_item[
'name
'] = response.xpath('
//h1/text()
').get()
bt_item[
'information
'] = ''.join(response.xpath('
//div[@id="info"]//text()
').getall())
bt_item[
'content
'] = response.xpath('
//div[@id="link-report"]/text()
').get()
bt_item[
'downloadurl
'] = response.xpath('
//div[@class="download-link"]/a/text() | //div[@class="download-link"]/a/@href
').getall()
yield bt_item
再次提醒別忘了去settings.py中開啟 item_pipelines 選項
pipelines.py檔案**如下:
import再次執行main.py 等待執行完成後開啟資料庫查詢pymongo
#連線本地資料庫
myclient = pymongo.mongoclient("
mongodb://localhost:27017/")
#資料庫名稱
mydb = myclient["
movie_bt"]
#資料表名稱
mysheet = mydb["
movie"]
class
xunleidianyingpipeline(object):
defprocess_item(self, item, spider):
data =dict(item)
mysheet.insert(data)
return item
資料儲存完成,這次我們一共匯入了380個資料,可以愉快的檢視電影了
Scrapy爬蟲爬取電影天堂
目標 建立專案 scrapy startproject 爬蟲專案檔案的名字 生成 crawlspider 命令 scrapy genspider t crawl 爬蟲名字 爬蟲網域名稱 終端執行 scrapy crawl 爬蟲的名字 python操作mysql資料庫操作 爬蟲檔案 coding ut...
爬取電影天堂
分析每頁的url,可以得到規律是 第t頁的url為 於是可以先分析第一頁,然後對頁數進迴圈,就可得到所有最新電影的詳細資訊。from lxml import etree headers defget movie url url resp requests.get url,headers header...
python xpath爬取電影天堂
import requests from lxml import html base domain url html gndy dyzz list 23 1.html headers defspider base url html gndy dyzz list 23 html movies for ...