1. 程式人生 > >scrapy+ selenium的小案例兩則,爬取食品藥品監管和twitter使用者資料。

scrapy+ selenium的小案例兩則,爬取食品藥品監管和twitter使用者資料。

環境:python 3.6

  • scrapy
  • selenium
  • chrome
  • chrome-driver
  • windows 10
    如何安裝python selenium 和對應谷歌版本的chrome-driver請自行在csdn中搜索。已經有很多大手子做過很詳細的教程了。在這裡我就不一一贅述了。
    本次只是單純的提供兩個在工作中使用到的小例子,以供大家更直觀的使用scrapy+selenium的組合。
    1.食品藥品監管
    因為該網站的資料在正常的請求後,返回的全是亂碼,食品藥品監管:http://qy1.sfda.gov.cn/datasearch/face3/dir.html

    有興趣的同學可以自己請求訪問試試,如果有新的發現,可以留言交流。
    因為資料要的比較急,所以沒有時間一點點搞js破解和邏輯解析,因此直接使用最簡單直接的爬取方式,
    模擬爬取!
    例項地址:連結:https://pan.baidu.com/s/1UqAmOqkj7ZhFEIlg4eq-3Q
    提取碼:eat3
    在例項中,為了減少電腦資源消耗(瀏覽器的開關和重新等待對方伺服器響應資料太費時間),因此每一個爬蟲只開一個瀏覽器,一直到資料爬取完成後,才關閉該瀏覽器。減少瀏覽器開啟和重載入的時間,加快爬取速度。
    基於這個設計思路,在爬蟲開啟後,直接在__init__中例項化並啟動webdriver,在middleware中接收值並返回值。
    過程很簡單,看一遍就會了。
    因為該網站的爬取策略中未對ip做限制,因此我就沒有將動態ip+selenium加入其中,感興趣的可以動手在本站中找一下,還是有很多的

2.推特使用者資料搜尋
為了響應某官方組織的要求,需要對輿情監控,現在缺少監控資料來源。因此需要獲取twitter中中文使用者的暱稱和id。 在找尋規則的過程中,twitter的防爬和防止機器操作作的很嚴謹。但還是有一個小的漏洞是可以使用的。
就是搜尋不需要登入,可以直接抽空所搜關鍵字的url進行直接訪問
實力地址:連結:https://pan.baidu.com/s/1YTOTkC6EinCB6ae2_ZEJQg
提取碼:g1wv
在本爬蟲遇上一個爬蟲大體類似,區別在於在middleware中進行一次訓混滾動條拖動和資料獲取比較。、
內容也比較簡單,可以直接下載執行。不過需要翻牆操作。

ps:其實有關於這個情形前提下還有一個構思,twitter嘛,自己的關注和粉絲都是有相同愛好的,尤其是關於這種反x反x的使用者,只需要找到一個人的。然後遍歷它的關注列表和粉絲,然後重複將儲存到資料庫中的這些人重複遍歷查詢。就會找到很多。
其中需要做的細節就是:
1.模擬登陸不要在正常的登陸頁進行,會被機器測試,很麻煩。直接在搜尋中做登陸。 如果你沒有登陸的話,開啟搜尋頁會在右上角自動彈出一個登陸框,本人做過幾次模擬登陸,一個賬號登陸了5次,分成不同的爬蟲同時登陸的。可以登陸,並且不會被ban。
然後再跳轉到起始目標源進行相關的爬取
2.資料儲存的過程中,需要在資料後做一個是否爬區過的識別,否則會重複爬取
3.考慮到資料來源多了以後,會出現關注+粉絲重複的情況,可以對使用者的個人id(twitter)在資料庫中做一個索引去重。也就是定義的欄位不會存入相同的資料。 那麼insert語句就需要在insert後面加上ignore,意義是如果資料存入出現重複,不報錯
4.如果該方法窮盡下去的話,其實是可以把twitter的所有使用者資料都搞到的。但沒必要
我們需要對使用者的名稱做分割然後測試該list中是否含有漢字,如果有則存入,沒有就拋棄。雖然會造成一定的資料丟失,但想必不會造成太大的丟失,因為你想啊:這種人肯定要在暱稱或者個簽上搞點動靜,要不體現不出它們的個性對吧~ 這就是一個很好的排除方式了。

好了,就到這了。歡迎大家留言交流哈~~