爬虫遇到的问题以及解决办法

最近由于工作需要开始接触爬虫,作为一个小白,真的是像个屋头苍蝇,下面主要是针对我自己遇到的问题以及解决办法做一下记录。。。

登录网页:包含用户名、密码、验证码,获取cookie

网页源码格式:

<script type=text/javascript src=static/js/manifest.37a2ecbb1d1b7e6c9ada.js></script>

放在<script></script>之间的是文本类型(text)。
javascript是告诉浏览器里面的文本是属于javascript脚本

网上的教程 通过标签路径获取,显然这是不可行的。

   from selenium import  webdriver
   import requests

   driver = webdriver.Chrome()
   driver.get("http://mydomain.com/login") 

    name_label = driver.find_element_by_id("clientname1")
    name_label.send_keys(" ") # 防止发送不成功
    name_label.clear()
    name_label.send_keys(my_name)

通过查看,发现登录连接为:http://mydomain.com/api/vue/login_login?KEYDATA=myname,mg,pwd,mg,veri 

KEYDATA后面是用户名、密码、验证码,显然用户名和密码是已知的,最不好得到的是验证码,

这里我用selenium模拟登录,当现实登录界面后,用

from selenium import  webdriver
import requests

driver = webdriver.Chrome()

driver.get("http://domain.com/GWC/#/login") 

check=input()
print(check)
url_dl = 'http://domain.com/api/vue/login_login?KEYDATA=name,mg,pwd,mg,' +check
driver.get(url_dl)
seleniumCookies = driver.get_cookies()
cookie = [item["name"] + "=" + item["value"] for item in seleniumCookies]
cookMap = ';'.join(item for item in cookie)

#把获得的cookie:seleniumCookies,放到header中

self.header['Cookie']=cookMap

②内容爬取:

登录后页面并不是直接进入要爬取内容页面,

我要爬取的内容url为:http://mydomain.com/api/vue/overhaul/getRailOverhaullistPage.do

查资料了解到:Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定组合的视图组件。不管了,我只需要知道url就行了。有了上面的cookie 就可以进行内容爬虫了

③翻页爬取

网上找了一圈,基本上都是获取下一页的连接,然后发送请求。

这里所有的数据连接都是http://mydomain.com/api/vue/overhaul/getRailOverhaullistPage.do

不同的地方是,currentPage参数不同,同时从totalPage中可以看出总共有多少页数据,currentResult中可以看出当前页有多少条记录。

那么我可以通过设置formdata的参数值来确定爬取的数据页

如何获取totalPage值来控制爬取的次数?

这里先爬取一次,获取totalPage

def parseLoginRes(self, response):
   
    # 登录之后,开始爬取数据
    yield scrapy.FormRequest(
        # 钢轨大修数据,通过接口形式爬取
        url="http://mydomain.com/api/vue/overhaul/getRailOverhaullistPage.do",
        # 不允许页面跳转来测试
        meta={'usedSelenium': False, 'dont_redirect': True},
        formdata={"selectFlag": "1", "showCount": "10", "currentPage": str(1)},
        headers=self.header,
        callback=self.pageTurn,
        errback=self.errorHandle,
        dont_filter=True
    )

然后再进行while循环爬取。 

def pageTurn(self,response):
     
    self.totalpage = json.loads(response.text)['data']['page']['totalPage']  # 获取总共有多少页需要爬取
    self.currentpage = 1
    while True:  # spider 获取输入的response 并且
        if self.currentpage > self.totalpage:
            break
        yield scrapy.FormRequest(
            # 钢轨大修数据,通过接口形式爬取
            url="http://mydomain.com/api/vue/overhaul/getRailOverhaullistPage.do",
            # 不允许页面跳转来测试
            meta={'usedSelenium': False, 'dont_redirect': True},
            formdata={"selectFlag": "1", "showCount": "10", "currentPage": str(self.currentpage)},
            headers=self.header,
            callback=self.parseLoginStatusRes,
            errback=self.errorHandle,
            dont_filter=True
        )
        self.currentpage += 1  

 

④导入自定义py文件,总是现实不存在,

import sys
sys.path.append(r"file_path")#指定自定义模块的位置
import file_name

这样就不会有问题了,

如果是上级目录中文件:

import sys
import os
sys.path.append(os.path.dirname(__file__) + os.sep + '../') #将下面的相对路径转化为绝对路径
from ..items import SpiderrailItem
 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬取Vue网页的过程,需要先了解Vue框架是如何工作的。Vue是一个前端框架,它的核心思想是数据驱动,即通过数据来驱动视图的变化。在Vue中,页面的渲染是通过JavaScript代码来实现的,而不是在HTML代码中预先编写。 因此,如果你想要爬取Vue网页,需要使用一些特殊的技术手段。以下是一些可能的方法: 1. 使用Selenium:Selenium是一个自动化测试工具,可以模拟用户在浏览器中的行为。通过使用Selenium,你可以打开一个浏览器窗口,加载Vue网页,然后通过JavaScript代码来获取网页中的数据。需要注意的是,使用Selenium可能会被网站视为恶意行为,因此需要谨慎使用。 2. 使用Requests-HTML:Requests-HTML是一个Python库,它可以模拟浏览器行为,解析JavaScript代码,并获取Vue网页中的数据。相比于Selenium,使用Requests-HTML可能更加稳定和高效,但是对于一些复杂的网站,可能无法完全模拟浏览器行为。 3. 分析API接口:Vue网页通常会使用一些API接口来获取数据,如果你能找到这些接口,就可以直接使用Python代码来获取数据,而不需要模拟浏览器行为。你可以通过浏览器开发者工具来查看网页中的API接口,或者通过抓包工具来分析网页的数据流。 需要注意的是,爬取网页数据是一项法律和道德问题。在进行数据爬取之前,你需要仔细阅读网站的服务条款,并确保你的行为不会侵犯他人的隐私或知识产权。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值