爬虫基础学习-爬取网页项目
靶场链接:
Scrape | Movie
爬取总结:
1.进入列表页,顺着列表爬取每个电影详情页
2.利用正则来提取,海报,名称,类别,上映的时间,评分,剧情简介
3.将爬取的内容,保存下来爬取步骤:
第一步:遍历所有的页码,拼接URL
第二步:拿到详情页页面的url
第三步:再详情页面用正则匹配出我们要的内容
第四步:保存数据
项目代码:
#! /usr/bin/env python3import logging
import requests
import re
from urllib.parse import urljoin
import pymongo# level指定记录日志的级别
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')Basic_url = 'https://ssr1.scrape.center'
TOTAL_PAGE = 10# 抓取某一页面的内容
def scrape_index(page):index_url = f'{Basic_url}/page/{page}'return scrape_page(index_url)# 定义一个函数抓取网页的内容
def scrape_page(url):logging.info("正在抓取 %s......", url)# 发送get请求try:response = requests.get(url)if response.status_code == 200:return response.textelse:logging.info("抓取 %s 时返回无效的状态码 %s ", url, response.status_code)except requests.RequestException:# 发生异常, 输出错误logging.error("抓取 %s 时发生异常", url, exc_info=True)# 解析内容, 并提取出详情页面的URL
def parse_index(html):# 用正则把连接提取出来pattern = re.compile('<a.*href="(.*?)".*?class="name">')items = re.findall(pattern, html)if not items:return []else:# 把相对来链接转化为绝对链接for item in items:detail_url = urljoin(Basic_url, item)logging.info("找到详情页面, 链接 %s ", detail_url)yield detail_urldef main():for page in range(1, TOTAL_PAGE+1):index_html = scrape_index(page)details_url = parse_index(index_html)logging.info("详情页面链接 %s ", list(details_url))if __name__ == '__main__':main()