四、原生数据存储 &ip代理&模拟登陆

一、数据存储

#1)存入json
import json
def write_to_json(data):
    # 把数据整合json支持的类型
    json_list = []
    for houses in data:
        for house in houses:
            json_list.append(house)

    with open('lianjian.json','w') as fp:
        fp.write(json.dumps(json_list,index=2,ensure_ascii=False))
        # .dumps()方法:将json对象转化为字符串
        # 参数indent:表示缩进个数
        # 参数ensure_ascii:是否将中文字符转化为Unicode字符

import csv
#2) 存入csv
def write_to_csv(data):
    # 在写csv的时候,需要把data整合成一个二维列表
    # 定义一个大的列表,用于保存所有的房屋信息
    csv_items = []
    for houses in data:
        for house in houses:
            # house是字典,按照键值的形式存储了每个房屋的信息,取出值写入列表
            item = []
            for k,v in house.items():
                item.append(v)
            csv_items.append(item)

    # 写入csv
    with open('lianjjia.csv','w') as fp:
        # 用fp来创建一个csv的写对象
        w = csv.writer(fp)
        w.writerow(['title','house','position','totalPrice','unitPrice','img'])
        w.writerows(csv_items)
        # .writerows()方法:同时写入多行,参数是个二维列表· 4
        
import pymysql
#3) 存入数据库
def write_to_mysql(data):
    # 创建一个mysql数据库的链接
    db = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123456',db = 'lianjia',charset='utf8')
    # 创建一个游标,用于解析sql语句
    cursor = db.cursor()

    # 创建sql语句
    for houses in data:
        for house in houses:
            sql = 'INSERT INTO ershoufang VALUES (NULL,"%s","%s","%s","%s","%s","%s",)'%(house['title'],house['house'],house['position'],house['totalPrice'],house['nuitPrince'],house['img'])

            # 解析并提交sql语句
            cursor.execute(sql)
            db.commit()

    # 关闭游标和数据库连接
    cursor.close()
    db.close()

二、ip代理

from  urllib import request
import requests
url = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=ip&oq=ip&rsv_pq=b254df33000238fe&rsv_t=caee8Radj5kHT5OB1roVV9axqOakQtWZzVH9BYWRWLXkJtyQBHfRRlcDylg&rqlang=cn&rsv_enter=0&rsv_sug3=1&rsv_sug1=1&rsv_sug7=100&prefixsug=ip&rsp=0&rsv_sug4=1224'

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    }

##########################################################3
# 创建一个请求对象
# request_obj = request.Request(url=url,headers=headers)

# 配置代理
# handler = request.ProxyHandler({"https":"113.200.56.13:8010"})

# 创建一个opener携带代理handler(h)

# opener = request.build_opener(handler)
# res = opener.open(request_obj)
####################################################################

res = requests.get(url=url,headers=headers,proxies = {"https":"113.200.56.13:8010"})

with open('./ip.html','wb') as fp:
    fp.write(res.content)
    fp.close()

三、模拟登陆

  • 模拟古诗文网登陆
    </br>
    使用Session状态保持
import requests
from lxml import etree


headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    }

# 登录页的url
page_url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'

# 登录需要提交的内容:用户名、密码、静态表单、两个token、验证码

# 经过分析,两个token和验证码是在访问登录页的时候动态生成
# log_html = requests.get(page_url)
s =requests.Session()    # 状态保持
log_html = s.get(page_url,headers=headers)
# 访问登录页的时候也要用到session,因为token值保存在后台,Session可以记录后台token值


# 获取两个token
login_tree = etree.HTML(log_html.text)

token_a = login_tree.xpath('//*[@id="__VIEWSTATE"]/@value')
token_b = login_tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')

# 获取验证码图片
code_url = 'https://so.gushiwen.org'+login_tree.xpath('//*[@id="imgCode"]/@src')[0]
print(code_url)
# 下载验证码
code_info = s.get(code_url)
with open('./code.png','wb') as fp:
    fp.write(code_info.content)
    fp.close()

# 验证码可以有以下几种处理机制,用第三方的ai平台接口来识别、自己训练AI、人工识别
code = input('请输入你看到的验证码')

# 登录信息提交的信息url
log_url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'

# 请求体
data = {
'__VIEWSTATE': token_a,
'__VIEWSTATEGENERATOR': token_b,
'from': 'http://so.gushiwen.org/user/collect.aspx',
'email': 'fanjianbo666@163.com',
'pwd': '12345678',
'code': code,
'denglu': '登录'
}

result = s.post(url=log_url,data=data)
print(result.text)
  • 模拟登陆chinaunix网

import requests
from bs4 import BeautifulSoup

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    }


# 登录页的url

login_page = 'http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes'
# 访问登录页面
s = requests.Session()
page_html = s.get(login_page,headers=headers)
soup = BeautifulSoup(page_html.text,'lxml')
action = soup.select('form.cl')[0].get('action')
formhash = soup.select('[name="formhash"]')[0].get('value')

# formhash、action是动态生成


# 登录接口需要动态获取
login_url = 'http://bbs.chinaunix.net/'+action

data = {
    'formhash':formhash,
    'referer':'http://bbs.chinanuix.net/./',
    'username':'Mrfan666',
    'password':'f12345678',
    'loginsubmit':'true',
    'returen_type':''

}

r = s.post(url=login_url,headers=headers,data=data)
print(r.text)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,184评论 11 349
  • charles不仅可以抓取电脑的网路请求,还可以抓取其他设备的网络请求。 第一步 设置charles主界面的pro...
    时间de歌阅读 397评论 0 0
  • 不少肾友都有过这样“需要低蛋白饮食”的医嘱,那么为什么要进行低蛋白饮食呢?对肾脏有什么帮助呢? 这需要先从蛋白质在...
    营养师锦虹阅读 448评论 0 2
  • 我要严肃地分析了 randomly说我爱你,其实是情感抒发的一种。抒发,不是宣泄,情感怎么都是积极向上的。哪怕两个...
    阿怡是娉爷阅读 855评论 0 1
  • 我买这张彩票,纯粹是个意外。我对彩票虽然也报有幻想,但是并不痴迷。可是那天下班回家路过十字路口的那个彩票站的时候,...
    剪窗阅读 181评论 0 0