吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16863|回复: 37
收起左侧

[Python 转载] 写个问卷星答题的爬虫脚本,试了下基本通用,供参考学习

  [复制链接]
0xSui 发表于 2020-4-3 15:35
本帖最后由 0xSui 于 2021-8-16 08:31 编辑

代码规则有部分变动,修改下div和class判断,现在可以识别题目的。
顺便查看了下,官网的题目(/m)是移动端页面,(/jq)是pc页面。
今天单位让答题,打开链接准备答题,提示:电脑上面答不了,还只能微信扫码答题,看了下网页的内容,是问卷星的答题卷;
题目和选项都在页面里面写好了,所以就简单写了个爬虫代码,用了beautifulsoup、requests,另外存储抓取内容用了mysql数据库;
题目的选项个数不一定统一,所以数据大家使用的时候,可以直接把抓取到的题目都放到一个字段里面存着,后面要用的时候,直接读出来,遍历就行;
再就是,这网站暂时没有防爬机制,所以直接while循环遍历那种随机题目的地址,就能刷出来整个题库的题目(稍微改改代码就能爬整个网站的题库了);
代码比较简单,简单分享,仅供学习~
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import time
import requests
import random
from bs4 import BeautifulSoup
import pymysql
from faker import Faker
fake = Faker(locale='zh_CN')

# 在这里配置mysql数据库的配置
mysql_host = '127.0.0.1'
# 数据库名称
mysql_db = 'wjx'
# 账号
mysql_user = 'root'
# 密码
mysql_password = '123'
# 端口
mysql_port = 3306
pages = []


def ua(refer_str):
    headers = {'User-Agent': fake.user_agent()}
    if len(refer_str) > 0:
        headers.update(Referer=refer_str)
    return headers

def db_insert(title, a, b, c):
    sql_s = '''insert ignore into questions (title, answer_a, answer_b, answer_c) values(%s, %s, %s, %s)'''
    db = pymysql.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, db=mysql_db, charset='utf8')
    cursor = db.cursor()
    cursor.execute(sql_s, (title, a, b, c))
    db.commit()
    db.close()


def html_get(url, header):
    with requests.Session() as s:
        s.keep_alive = False
        html = ""
        while html == "":
            try:
                res_get = s.get(url, headers=header)
                # stream=True
                print(res_get.status_code)
                html = res_get.content
                return res_get.content
            except Exception as e:
                print(e)
                print('下载出错: %s' % url)
                continue


def get_wjx(wj_url):
    html_str = html_get(wj_url, ua(refer_str='http://ks.wjx.top'))
    # print(str(html_str, 'utf-8'))
    bs_str_all = BeautifulSoup(str(html_str, 'utf-8'), 'html.parser').findAll("div", attrs={"class": "field ui-field-contain"})
    # print(bs_str_all)
    for item in bs_str_all:
        t = ''
        ss = []
        title = item.findAll('div', attrs={'class': 'field-label'})
        sections = item.findAll('div', attrs={'class': 'label'})
        # if title[0].get_text() == '基本信息:*':
        #     print("跳过该记录")
        # else:
        for t in title:
            t = t.get_text()
        for section in sections:
            ss.append(section.get_text())
        if len(ss) < 1:
            print('跳过空白题目')
        else:
            print(t)
            print(ss)
            # 开始插入数据库
            # 不确定选项数,我抓题用的是三个选项的,根据题目情况特殊处理
            if len(ss) < 3:
                ss.append('')
            if len(ss) < 4:
                ss.append('')
            s_a = ss[0]
            s_b = ss[1]
            s_c = ss[2]
            s_d = ss[3]
            db_insert(title=t, a=s_a, b=s_b, c=s_c, d=s_d)

def job():
    print('开始抓取')
    while True:
        url1 = 'https://ks.wjx.top/jq/63596149.aspx'
        get_wjx(wj_url=url1)
        time.sleep(3)


if __name__ == '__main__':
    # 调试执行
    job()

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
成为烂床 + 1 + 1 我很赞同!
一夜落雪心已寒 + 1 + 1 谢谢@Thanks!
toxufe + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 0xSui 发表于 2020-9-23 15:41
Koardor 发表于 2020-9-23 08:05
现在防爬了 返回200

不是的,200是html_get方法打印的返回状态值,不出结果是因为div标签修改了class值,所以没有匹配到题目内容,调试下抓取代码就又可以正常抓取了
theasonq 发表于 2020-11-28 16:56
Traceback (most recent call last):
  File "D:/works/python/wjx.py", line 132, in <module>
    job()
  File "D:/works/python/wjx.py", line 126, in job
    get_wjx(wj_url=url1)
  File "D:/works/python/wjx.py", line 120, in get_wjx
    db_insert(title=t, a=s_a, b=s_b, c=s_c, d=s_d)
TypeError: db_insert() got an unexpected keyword argument 'd'
>>>
这个怎么破,就爬取了一个题目后出错了
BlovedCQ 发表于 2020-4-3 21:43
cdtily 发表于 2020-4-4 15:55
谢谢分享,最近在学python,参考研究一下
梦回q 发表于 2020-4-9 09:36
大佬这个是获取一个答题的题目和答案的吗
神慯 发表于 2020-4-25 13:41
感谢!!!代码写的很漂亮!!学到很多!第一次对爬虫有直观的认识!!
郭小生 发表于 2020-5-7 12:08
直接放入油猴就可以了?
大佬
 楼主| 0xSui 发表于 2020-5-9 22:13
郭小生 发表于 2020-5-7 12:08
直接放入油猴就可以了?
大佬

这是python代码,需要安装python,用pip安装依赖,再用python xxx.py来执行代码
 楼主| 0xSui 发表于 2020-5-9 22:14
神慯 发表于 2020-4-25 13:41
感谢!!!代码写的很漂亮!!学到很多!第一次对爬虫有直观的认识!!

有帮助到就好,我也是初学者
lcylcylcy 发表于 2020-5-11 13:41
浏览学习
houniyijiu 发表于 2020-5-17 18:20
太厉害了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表