scrapy startproject doubanhtml
其中douban是咱們的項目名稱python
2建立爬蟲文件cookie
進入到douban 而後建立爬蟲文件python爬蟲
scrapy genspider dou douban.comdom
或者 scrapy genspider -t crawl dou douban.com # 這個在建立時使用的是模板crawlscrapy
這裏須要注意的是Spider的名稱不能和項目的名稱重複。ide
建立後的dou.py的內容爲:函數
3而後使用pycharm打開douban工程post
模擬登錄(關於模擬登陸下面這個博客寫的很詳細了)學習
代碼中一些參數什麼含義已經有註釋了:以下顯示
# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem
from scrapy.http import Request ,FormRequest
class DouSpider(scrapy.Spider):
name = 'dou'
allowed_domains = ['douban.com']
# start_urls = ['http://douban.com/']
#target_url 表示咱們想爬取內容的地址,target_url 也能夠是模擬登陸成功後你的我的中心
target_url = 'https://movie.douban.com/subject/1652592/comments?start={}&limit=20&sort=new_score&status=P'
# 編寫start_requests()方法,第一次會默認調取該方法中的請求
def start_requests(self):
return [Request("https://www.douban.com/", meta={"cookiejar": 1}, callback=self.login)]
def login(self, response):
# 判斷有誤驗證碼
# 設置要傳遞的post信息
data = {
"ck":"",
"name":"*****",#帳號
"password":"******",密碼
"remember":"false",
"ticket":""
}
# print("登陸中…")
# 經過FormRequest進行登錄
return [FormRequest(url="https://accounts.douban.com/j/mobile/login/basic",
method = 'POST',
# 設置cookie信息
meta={"cookiejar": response.meta["cookiejar"]},
# 設置post表單中的數據
formdata=data,
# 不進行去重處理
dont_filter=True,
# 設置回調函數,此時回調函數爲next
callback=self.next,
)]
def next(self, response):
data = response.body
with open("F:\\大講臺爬蟲\\python爬蟲\\scrapy\\douban\\a.html", 'wb') as f:
f.write(data)
yield Request(self.target_url,
callback=self.next2, meta={"cookiejar": True})
def next2(self, response): #response返回的是target_url對應的內容
print(response.xpath("/html/head/title/text()").extract(http://www.my516.com/heimitao/))
通過調試(調試方法能夠參考個人scrapy項目如何進行調試)
login()方法中涉及的回調函數返回的信息是登陸是否成功的信息
下面是咱們的正常運行結果(中間須要在settings.py文件設置一些參數前面的一篇博客寫的很好了)
總結:咱們能夠將target_url改爲咱們想在豆瓣上爬取的網頁,next2方法是網頁返回的response,咱們能夠在該方法下提取咱們想要的字段。能夠參考上面提到的博客鏈接,本文主要記錄本身在學習爬取豆瓣須要破解的一些反爬取的手段。---------------------