Python进阶之前端和爬虫基础( 二 )


8、将爬取到的数据保存在Excel文件中
在我们获得爬取到的数据时,要将他们放在Excel表格里面,这样方便后续的保存和查看
(1)中支持读写Excel文件的方式(2)了解Excel的构成方式(3)保存步骤------以三方库xlwt为例
wb = xlwt.Workbook()# 创建一个工作簿对象sheet = wb.add_sheet('TOP250')# 创建一个表单col_names = ('排名', '名称', '评分', '类型', '制片国家', '语言', '时长')# 创建Excel表格表头for index, name in enumerate(col_names):sheet.write(0, index, name)
9、如何读写csv文件(逗号分隔值文件)
首先要了解csv文件是一个文本文件
(1)写csv文件
import csvwith open('test.csv', 'w', encoding='utf-8') as file:csv_writer = csv.writer(file, quoting=csv.QUOTE_ALL)csv_writer.writerow(['张飞', 90, 80, 70])csv_writer.writerow(['关羽', 98, 80, 70])csv_writer.writerow(['马超', 95, 85, 70])csv_writer.writerow(['赵云', 34, 80, 70])csv_writer.writerow(['黄忠', 67, 56, 70])
(2)读csv文件
import csvfrom Tools.scripts.mkreal import joinwith open('2018年北京积分落户数据.csv', 'r', encoding='utf-8') as file:csv_reader = csv.reader(file)for row in csv_reader:print(',', join(str(row)))# print(f'编号:{row[0]}')# print(f'编号:{row[1]}')# print(f'编号:{row[2]}')# print(f'编号:{row[3]}')# print(f'编号:{row[4]}')
10、动态网页的爬取 (1)了解解释器类型(2)动态页面的爬取
页面上可能有动态内容(通过代码动态生成,显示网页源代码时看不到内容)
方法二:通过代码操控浏览器,直接拿到带动态内容的页面,然后再提取数据+ +
from selenium import webdriverimport bs4driver = webdriver.Chrome()driver.get('https://image.so.com/z?ch=beauty')# page_source是带动态内容的页面源代码soup = bs4.BeautifulSoup(driver.page_source, 'html.parser')imgs = soup.select('img')for img in imgs:print(img.attrs['src'])
三、多线程(并发编程)
线程池:先用一个容器,提前创建好若干个线程放进去,用线程的时候从线程池中借出一个线程,用完了之后,不要释放线程,而是把这个线程放回池子,让线程可以被重复利用
池化技术基本上都是空间换时间的做法
1、创建多线程
当程序中有耗时间的任务,可能会阻塞别的任务的执行,并且他们之间没有因果关系,就可以利用多线程来同时进行
(1)创建线程对象(2)指定线程属性 - args (3)启动线程(4)等待线程结束 - join
import randomimport timedef record_time(func):def wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)end = time.time()print(f'{func.__name__}执行时间:{end-start:.3f}秒')return resultreturn wrapper@record_timedef download(filename):print(f'开始下载{filename}')time.sleep(random.randint(5, 10))print(f'{filename}下载完成')@record_timedef main():print(download.__name__)t1 = Thread(target=download, args=('窗前明月光.pdf',))t1.start()t2 = Thread(target=download, args=('疑是地上霜.avi',))t2.start()t3 = Thread(target=download, args=('原来是幻觉.avi',))t3.start()t1.join()t2.join()t3.join()print(f'下载总时间: ')if __name__ == '__main__':main()
2、创建线程池