翻车之旅,Python站长之家长尾关键词挖掘

关键词采集翻车之旅,站长之家反爬,会员登陆,vip购买限制,大概率是分享的代码过多,被大佬们爆菊次数太多,自从站长之家改版更新之后,割韭菜的力度加大,反爬力度也增多。

所以就有了这次的翻车体验之旅,很久没写爬虫,翻车是必然。

反爬限制:

  • 翻页到第六页,需要登陆

  • 翻页到第十页,需要购买vip

使用网页cookies然并软,访问第六页,还是直接跳转到第一页数据!

使用session保持访问,访问第六页,还是直接跳转到第一页数据!

使用refer,访问第六页,还是直接跳转到第一页数据!

无法理解其具体的反爬机制,换浏览器测试访问发现连续翻页,到第六页,需要登陆才能正常访问。

附翻车完整参考源码:

#站长之家关键词挖掘 20201014
#author/微信:huguo00289
# -*- coding: utf-8 -*-

import requests,random,time
from lxml import etree
from urllib import parse

class Httprequest(object):
    ua_list = [
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36Chrome 17.0',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0Firefox 4.0.1',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
        'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
        'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
    ]
    @property  #把方法变成属性的装饰器
    def random_headers(self):
        cookies = cookies
        return {
            'User-Agent': random.choice(self.ua_list),
            'Cookie':cookies,
        }




class Getwords(Httprequest):
    def __init__(self):
        self.url="https://data.chinaz.com/keyword/allindex/"


    def get_num(self,keyword):
        key = parse.quote(keyword)
        url=f'{self.url}{key}'
        html = requests.get(url,headers=self.random_headers,timeout=5).content.decode("utf-8")
        time.sleep(2)
        req = etree.HTML(html)
        num=req.xpath('//span[@class="c-red"]/text()')[0]
        num=int(num)
        if num>0:
            print(f'>> {keyword} 存在 {num} 个长尾关键词!')
            if num<50:
                self.get_words(req)
            else:
                self.get_pagewords(num,key)


        else:
            print(f'>> {keyword} 不存在长尾关键词!')




    def get_words(self,req):
        words=req.xpath('//li[@class="col-220 nofoldtxt"]/a/@title')
        indexs=req.xpath('//li[@class="col-88"]/a/text()')
        for word,index in zip(words,indexs):
            data=word,index
            print(data)



    def get_pagewords(self,num,key):
        pagenum=int(num/50)
        for i in range(1,pagenum+1):
            if i<=10:
                print(f'>> 正在采集 第{i}页 长尾词数据..')
                url = f'{self.url}{key}/{i}'
                print(url)
                html = requests.get(url,headers=self.random_headers,timeout=5).content.decode("utf-8")
                time.sleep(2)
                req = etree.HTML(html)
                self.get_words(req)




if __name__ == '__main__':
    spider=Getwords()
    spider.get_num("培训")

      

微信公众号:二爷记

不定时分享python源码及工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用element-ui提供的表单验证来验证该字段是否为空。示例代码如下: ``` <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="事故形态" prop="xingtai" pop="xingtai"> <el-select v-model="form.xingtai" @change="chaxingtai(form.xingtai)" placeholder="请选择事故形态" size="small" > <el-option label="碰撞" value="碰撞"></el-option> <el-option label="刮蹭" value="刮蹭"></el-option> <el-option label="碾压" value="碾压"></el-option> <el-option label="翻车" value="翻车"></el-option> <el-option label="坠车" value="坠车"></el-option> <el-option label="失火" value="失火"></el-option> <el-option label="撞固定物" value="撞固定物"></el-option> <el-option label="撞静止车辆" value="撞静止车辆"></el-option> <el-option label="其他" value="其他"></el-option> </el-select> <div v-if="xingtaiqita" style="width: 200px"> <el-input type="textarea" v-model="form.select_1" size="small" clearable ></el-input> </div> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { xingtai: '', select_1: '' }, xingtaiqita: false, rules: { xingtai: [ { required: true, message: '请选择事故形态', trigger: 'change' } ] } } }, methods: { chaxingtai(value) { if (value === '其他') { this.xingtaiqita = true } else { this.xingtaiqita = false } }, submitForm() { this.$refs.form.validate(valid => { if (valid) { // 表单验证通过,提交表单 console.log('submit') } else { // 表单验证失败 console.log('error submit') return false } }) } } } </script> ``` 在上面的代码中,我们给`el-form-item`组件设置了`prop`属性为`xingtai`,这是为了在验证时使用。在`rules`中,我们设置了`xingtai`字段必填,如果该字段为空,则会提示用户选择事故形态。在`submitForm`方法中,我们调用了`this.$refs.form.validate()`方法来进行表单验证,如果验证成功,则可以提交表单,否则会提示用户错误信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值