爬虫札记1_requests+xlwt+lxml 爬取maoyan

浏览: 1480
```
import
json
from lxml import etree
import requests
import xlwt


class MaoyanSpider:
# 通过建立一个类,多个函数 实现
# 代码实现通过lxml和xpath对猫眼电影top100的爬取
# 保存成TXT和Excel表格中

# 初始化urlheaders
def __init__(self):
self.start_url = 'https://maoyan.com/board/4?offset={}'
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}


# 根据url的规律,构造url_list
def get_url_list(self):
url_list = [self.start_url.format(10*i) for i in range(10)]
return url_list

# 发送请求,获取响应
def parse_url(self, url):
print("parsing...", url)
response = requests.get(url=url, headers=self.headers)
return response.content.decode('utf-8', 'ignore')

# 获取数据
def get_content_list(self, html_str):
html = etree.HTML(html_str)
div_list = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd')
content_list = []
for div in div_list:
item = {'film_name': '', 'film_actor': '', 'film_time': ''}
item["film_name"] = div.xpath('.//div/div/div[1]/p[1]/a/text()')[0].strip('[]')
item["film_actor"] = div.xpath('.//div/div/div[1]/p[2]/text()')[0].replace('\n ', '').strip().split("主演:")[1] # 取出来的数据先去掉换行再去掉空格最后去掉主演:
item["film_time"] = div.xpath('.//div/div/div[1]/p[3]/text()')[0].strip('[]').split("上映时间:")[1]
content_list.append(item)

return content_list

# 保存数据
def save_content_list(self, content_list):
with open("maoyan2.txt", "a", encoding="utf-8") as f :
for content in content_list:
f.write(json.dumps(content, ensure_ascii=False))
f.write("\n")

print("保存成功")

# 数据保存到Excel中,使用xlwt(用于写入Excel中)
def save_to_excel(self, content_list):
workbook = xlwt.Workbook(encoding='utf-8')
sheet = workbook.add_sheet('maoyan_film') # 设置表名
head = ['电影名称','主演','上映时间'] # 设置表头
for h in range(len(head)):
sheet.write(0, h, head[h])

length = len(content_list)
for j in range(1,length+1):
sheet.write(j,0,content_list[j-1]["film_name"])
sheet.write(j,1,content_list[j-1]["film_actor"])
sheet.write(j,2,content_list[j-1]["film_time"])

workbook.save('./maoyan2.xls')
print('写入Excel成功')


def main(self):
# 获得url_list
url_list = self.get_url_list()
# url_list中进行请求的发送,内容的获取以及保存数据
content_lists = []
for url in url_list:
html_str = self.parse_url(url)
content_list = self.get_content_list(html_str)
# extend()将两个列表进行合并;append()是在末尾进行追加元素
self.save_content_list(content_list)
content_lists.extend(content_list)
self.save_to_excel(content_lists)

if __name__ == '__main__':
maoyan = MaoyanSpider()
maoyan.main()
```


image.png

推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册