Q1.用scrapy shell “http://****”命令測(cè)試過(guò)xpath,可以確定xpath沒(méi)有問(wèn)題,但pycharm就是提示xpath有問(wèn)題
A1: 把xpath中的"改成','改成",如果這個(gè)方法還不行,就重啟pycharm重試下
Q2:控件class名或id名都對(duì),xpath就是報(bào)錯(cuò),用scrapy shell “http://****”命令測(cè)試xpath也是報(bào)錯(cuò),
舉例:response.xpath('//article[@class="news"]//a')
A2:關(guān)注下頁(yè)面中控件對(duì)應(yīng)的class或id,是不是有多個(gè),換個(gè)別的控件作為查找依據(jù)~
例子:頁(yè)面上class為news的article很多,導(dǎo)致在找a標(biāo)簽過(guò)程中有報(bào)錯(cuò),換個(gè)別的元素,比如父類div,或者子類p
Q3:控件class名或id名都對(duì),排除Q2情況,xpath就是報(bào)錯(cuò),用scrapy shell “http://****”命令測(cè)試xpath也是報(bào)錯(cuò),
舉例:獲取百度主頁(yè)左上角的按鈕列表

目標(biāo):百度首頁(yè)按鈕(guggle簡(jiǎn)書原創(chuàng))
A3: 主要原因是通過(guò)瀏覽器訪問(wèn)的html和scrapy抓取到的html是不一樣
例子:如果通過(guò)瀏覽器訪問(wèn),頁(yè)面源碼如圖所示

瀏覽器訪問(wèn)的頁(yè)面源碼(guggle簡(jiǎn)書原創(chuàng))
我們可以通過(guò)xpath("http://div[@id='s-top-left']//a"),用firefox瀏覽器的Try Xpath插件可以看到xpath語(yǔ)句是沒(méi)有問(wèn)題的

Try Path插件運(yùn)行xpath("http://div[@id='s-top-left']//a")(guggle簡(jiǎn)書原創(chuàng))
如果要看scrapy訪問(wèn)頁(yè)面的源碼,可以在cmd命令窗口輸入
>scrapy shell "https://www.baidu.com"
命令完成后,屏幕顯示In [1]: ,再輸入
>view(response)
瀏覽器自動(dòng)打開scrapy抓到的html,源碼為

scrapy訪問(wèn)的頁(yè)面源碼(guggle簡(jiǎn)書原創(chuàng))
我們需要通過(guò)xpath("http://div[@id='u1']//a")才能找到按鈕列表,用firefox瀏覽器的Try Xpath插件驗(yàn)證結(jié)果

Try Path插件運(yùn)行xpath("http://div[@id='u1']//a")(guggle簡(jiǎn)書原創(chuàng))
我們?cè)趕pider腳本中,寫response.xpath("http://div[@id='u1']//a")才能找到百度首頁(yè)的這些按鈕列表,通過(guò)response.xpath("http://div[@id='s-top-left']//a")可是找不到的哦~
Q4:使用scrapy自帶的'scrapy.pipelines.images.ImagesPipeline',setting中配置下載目錄IMAGES_STORE = "guggle_jianshu",圖片無(wú)法下載到本地
A4:spider中parse方法中返回的item,需要使用image_urls這個(gè)key值,并且這個(gè)image_urls對(duì)應(yīng)的value值是個(gè)list

系統(tǒng)自帶的ImagesPipeline如何正確使用(guggle簡(jiǎn)書原創(chuàng)).png
PS:如果需要使用scrapy.pipelines.files.FilesPipeline,系統(tǒng)默認(rèn)是使用file_urls這個(gè)key值
如果需要使用scrapy.pipelines.images.ImagesPipeline,但是不用系統(tǒng)自定義的key值,需要在setting中配置IMAGES_URLS_FIELD = "guggle_img"

自定義ImagesPipeline使用的key值.png