国科大——移动互联第三次作业

淘宝网站登录,使用:requests和cookies

  1. 注册淘宝并登录
  2. 复制cookie在这里插入图片描述
#!coding:utf-8
import requests

url = 'https://login.taobao.com/member/login.jhtml'
header = {
          'Cookie': '你的cookie',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
          }

print(requests.get(url, headers=header).text)

使用scrapy自动登录学校信息门户网站(http://sep.ucas.ac.cn/)

  1. 创建scrapy模板在,在目标文件夹下使用cmd(需要配置好python的环境变量)

按如下顺序执行命令

  • mkdir fileName
  • scrapy startproject fileName
  • cd fileName\fileName\spiders
  • scrapy genspider -t basic spiderName 爬取的网站域名

到此已经创建好了scrapy的模板

  1. 编辑login.py文件
# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request, FormRequest

class LoginSpider(scrapy.Spider):
    name = 'login' # 爬虫的名称,启动时需要使用这个爬虫名
    allowed_domains = ['https://sep.ucas.ac.cn/'] # 爬虫允许爬取的域的范围
    start_urls = ['https://sep.ucas.ac.cn'] # 第一次启动时的url地址,每次的请求都在调度器中进行排队
    header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"}
    # 编写start_requests()方法,第一次会默认调取该方法中的请求

    def start_requests(self):
        # 首先爬一次登录页,然后进入回调函数parse()
        return [Request("https://sep.ucas.ac.cn",meta={"cookiejar":1},callback = self.parse)]

    def next(self, response):
        print(response.body) # 打印相应文件的body标签下的内容
        print("Successful!!!")


    # 每次Request返回的Response文件都会调用parse(解析)进行处理
    # 运行爬虫后,名为 parse() 的方法将会被自动调用
    def parse(self, response):
        # 设置要发送的post信息
        data = {
            'userName': 'good luck to you',  # 输入你自己的账号
            'pwd': '********',  # 输入你自己的密码
            'sb': 'sb'
        }
        print("登入中...")
        return FormRequest(
            url='https://sep.ucas.ac.cn/slogin',
            method='post',
            formdata=data,
            meta={'cookiejar': response.meta['cookiejar']},
            # 如果需要多次提交表单,且url一样,那么就必须加此参数dont_filter,防止被当成重复网页过滤掉了
            dont_filter=True,
            callback=self.next
        )



  1. 运行

scrapy crawl login

学校网站的POST登录请求文件
在这里插入图片描述在这里插入图片描述

使用Scrapy爬取学校网站教学科研的新闻(https://www.ucas.ac.cn/site/26)

  • 要求爬取:新闻的标题、链接和日期
  • 分别使用:基本爬虫和自动爬虫
  1. 基本爬虫
# ********************主文件.py文件中代码************************
# -*- coding: utf-8 -*-

# 基本爬虫
import requests
import scrapy
from scrapy.http import Request, FormRequest
from ..items  import UcasnewsItem
from scrapy.selector import Selector

class LoginSpider(scrapy.Spider):
    name = 'ucasNews' # 爬虫的名称,启动时需要使用这个爬虫名
    allowed_domains = ['https://sep.ucas.ac.cn/'] # 爬虫允许爬取的域的范围
    start_urls = ['https://www.ucas.ac.cn/site/26?pn=1'] # 第一次启动时的url地址,每次的请求都在调度器中进行排队

    # 每次Request返回的Response文件都会调用parse(解析)进行处理
    # 运行爬虫后,名为 parse() 的方法将会被自动调用
    def parse(self, response):
        items = []
        item = UcasnewsItem() # 需要提前import
        sel = Selector(response)

        for j in range(1, 21): # item不是字典类型,继承自字典类型,无法使用append函数
            item['news_url'] = sel.xpath("/html/body/div[4]/div[2]/div[2]/div[3]/p[" + str(j) + "]/a/@href").extract()
            item['news_title'] = sel.xpath("/html/body/div[4]/div[2]/div[2]/div[3]/p[" + str(j) + "]/a/@title").extract()
            item['news_date'] = sel.xpath("/html/body/div[4]/div[2]/div[2]/div[3]/p[" + str(j) + "]/span/text()").extract()
            print(item)

# *******************items.py文件中*****************************
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class UcasnewsItem(scrapy.Item):
    news_title = scrapy.Field() #新闻标题
    news_date = scrapy.Field()     #新闻时间
    news_url = scrapy.Field()   #新闻的详细链接


  1. 自动爬虫
在这里插入代码片
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆羽飘扬

如果有用,请支持一下。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值