今天又爬取一些资源,仅仅是自己会动态翻页爬取,中间遇到一些问题记录下来,仅供之后学习参考,如有错误之处,请指出~
import requests
import re
import csv
for start in range(0,51,25):
print('------------------正在抓取第{}页数据-----------------------'.format(start))
url="https://movie.XXXX.com/top250?start={}&filter=".format(str(start))
headers={
}
resp=requests.get(url,headers=headers)
page_content=resp.text
#解析数据
obj=re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
r'</span>.*?<p class="">.*?<br>(?P<year>.*?) .*?<span '
r'class="rating_num" property="v:average">(?P<score>.*?)</span>.*?'
r'<span>(?P<num>.*?)人评价</span>',re.S)
"""result=obj.finditer(page_content)
print(type(result))
for it in result:
print(it)"""
#开始匹配
result=obj.finditer(page_content)
f=open('douban.csv',mode='a',encoding='utf-8')
csvwriter=csv.writer(f)
for it in result:
"""print(it.group("name"))
print(it.group("score"))
print(it.group("num"))
print(it.group("year").strip())#strip()去除空格
整理成字典的格式"""
dic=it.groupdict()
dic['year']=dic['year'].strip()
csvwriter.writerow(dic.values())
f.close()
print('over!')
1.在for循环中不想默认循环值为1是,就是for start in range(start,end,循环值)
如果循环值没有设置则默认为1。
2.因为是翻页,所以我遇到了爬出数据放置在文件中被覆盖掉,原因是在f=open('douban.csv',mode='a',encoding='utf-8')
在打开文件上的时候我是用的mode=‘w’,w是写入,所以后边爬下来的数据会覆盖掉之前的数据。a是添加就不会。
好,今天记录的学习内容就是这些。比心心~哈哈哈## 标题