import requests import lxml.html#Xpath就是根據一定的網頁地址定位到某個值 import csv import os #訪問url,獲取網頁信息 def get_douban_movie(taget_url): req=requests.get(taget_url) req.encoding='utf-8' return req.content #從網頁信息中,選擇class=info中的整段信息,再從info中獲取title,link等信息 #創建一個列表,將每個電影的內容存入一個字典中,將所有書的字典放在一個列表裏面 def get_movie_info(source): selector = lxml.html.document_fromstring(source) info_data=selector.xpath('//div[@class="info"]') info_list=[] for eachinfo in info_data: info_dict={} title=eachinfo.xpath('div[@class="hd"]/a/span[@class="title"]/text()')[0] link=eachinfo.xpath('div[@class="hd"]/a/@href')[0] star=eachinfo.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0] quote=eachinfo.xpath('div[@class="bd"]/p/span[@class="inq"]/text()')[0] info_dict['title']=title info_dict['link']=link info_dict['star']=star info_dict['quote']=quote info_list.append(info_dict) return info_list #將內容寫入到csv文件中,首先判斷目錄是否存在,不存在則創建 #將文本內容寫入到csv文件中,使用的讀寫方式爲w,如果是二進制類型的,則使用ab方式 #將列表中的每個字典內容,單次寫入到文件中,如果不想要文件中有空行,則設置newline="" def create_csv(info_list): if not os.path.exists('./MovieCsv'): os.mkdir('MovieCsv') with open('./MovieCsv/movieDouban.csv',"w",newline="") as f: writer=csv.DictWriter(f,fieldnames=['title','link','star','quote']) writer.writeheader() for eachmove in info_list: writer.writerow(eachmove) #主函數調用 #其中觀察url鏈接中的數字變化,和頁數產生的關聯,從而使用循環來完成多頁的爬蟲 #循環控制頁數for i in range(5) if __name__ == '__main__': taget_url = 'https://movie.douban.com/top250?start={}&filter='# 當前頁數-1*25,此處的0是變量 taget_list=[] for i in range(5): taget_data=get_douban_movie(taget_url.format(i*25)) taget_list+=get_movie_info(taget_data) create_csv(taget_list)
爬蟲-豆瓣電影-Xpath定位-影評寫入CSV文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.