一个月当中利用碎片化的时间刷了一遍《Python编程:从入门到实践》的第一部分,项目部分,项目1刷了一半,项目2全刷完了,项目3的web项目目前不想刷。不得不说这是本非常适合0基础同学学习python的书。关于爬虫,目前正在刷崔庆才老师的《Python3网络爬虫开发实践》,这本书关于爬虫的知识非常丰富翔实,崔老师个人博客有部分内容开源。另外还了解了一些HTML和CSS的内容(html文件结构,css选择器等),在以上2本书和搜索引擎和各类同好的帮助下今天写了个简单的爬虫小程序:爬取豆瓣250电影。感谢豆瓣对爬虫的包容!
win10下解析网页源代码时如果出现错误:Unicodedecoderror:'gbk'……啥的,我的解决方法如下:
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
mac osx系统下目前没碰到这种情况。
通关继续观察发现,每个网址的start=后面的数字每次递增25.
查看网页源代码发现,一部电影的信息都包含在 一对
标签当中。本次采用pyquery库来解析。
from pyquery import PyQuery as pq
import json
import time
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
html = pq(url=url,headers=headers)
return html
def write_to_file(html):
lis = html('.grid_view li').items()
for li in lis:
text = 'Index: {}, Title: {},Score: {}'.format(
li.find('em').text(),
li.find('span.title').text(),
li.find('span.rating_num').text()
)
with open('result.txt','a',encoding='utf8') as f:
f.write(text + '\n')
def main(start):
url = 'https://movie.douban.com/top250?start={}&filter='.format(start)
html = get_one_page(url)
write_to_file(html)
if __name__ == '__main__':
for i in range(0,250,25):
main(start=i)
#延时一秒钟,防止访问速度过快
time.sleep(1)
……
豆瓣250,你看过几部呢?