datawhale_爬虫_spider |第八期

task01

任务预览

1.学习get与post请求,尝试使用requests或者是urllib用get方法向https://www.baidu.com/发出一个请求,并将其返回结果输出。
2.如果是断开了网络,再发出申请,结果又是什么。了解申请返回的状态码。
3.了解什么是请求头,如何添加请求头。
4.学习什么是正则表达式并尝试一些正则表达式并进行匹配。
5.结合requests、re两者的内容爬取https://movie.douban.com/top250里的内容。
要求抓取名次、影片名称、国家、导演等字段。
 ———————————————— 
版权声明:本文为CSDN博主「Qinchuyan_2019」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42795083/article/details/98655421

code_datawhale01_douban_top250

# encoding:utf-8


# 结合requests、re两者的内容爬取https://movie.douban.com/top250里的内容。要求抓取
# 名次、
# 影片名称、
# 国家、
# 导演等字段。
import requests, re, json
from requests.exceptions import RequestException

# 得到url
def get_one_page(url):
    try:
        res = requests.get(url)
        print (str(res) + '开始开车,请坐稳')
        if res.status_code == 200:
            return res.text
        return None
    except RequestException:
        return None


# "number": item[0],  # 名次
# "name": item[1],  # 影片名称

# "describe": content,  # 描述

# "star": item[3],  # 评分
# "evaluate": item[4],  # 评分人数
# "title": item[5]  # 主旨
# https://deerchao.net/tutorials/regex/regex.htm
# 正则三十分钟入门
# \d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。
# 这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:
# # a.*?b匹配最短的,以a开始,以b结束的字符串。

# re.S
# 在字符串中,包含换行符\n,在这种情况下:
# 如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始。
# 而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。

# re.finall
# 正则 re.findall  的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)

# <em class="">(\d+)</em>  # 名次 <em class="">1</em>
# <span class="title">(.*?)</span> # 影片名称 <span class="title">肖申克的救赎</span>

# 描述 Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
# str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
# num -- 分割次数。默认为 -1, 即分隔所有
# https://www.runoob.com/python/att-string-split.html

# re是正则的表达式,sub是substitute表示替换
# re.sub(pattern, repl, string, count=0, flags=0)
# pattern:表示正则表达式中的模式字符串;
# repl:被替换的字符串(既可以是字符串,也可以是函数);
# string:要被处理的,要被替换的字符串;
# count:匹配的次数, 默认是全部替换
# flags:具体用处不详模式,替换词, 被替换词, 替换的个数,
# 其中三个必选参数:pattern, repl, string
# 两个可选参数:count, flags
# https://www.jianshu.com/p/8c1d1a38f9b9
""" 
<p class="">(.*?)</p> # 描述 
<p class="">
                            导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
                            1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情
                        </p>
<p class="">
                            导演: 陈凯歌 Kaige Chen&nbsp;&nbsp;&nbsp;主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...<br>
                            1993&nbsp;/&nbsp;中国大陆 香港&nbsp;/&nbsp;剧情 爱情 同性
                        </p>                        
                        
                   
"""

# <span class="rating_num" property="v:average">(.*?)</span>  # 评分
# <span class="rating_num" property="v:average">9.7</span>

# <span>(.*?)</span> # 评分人数  # <span>1554769人评价</span>

# <span class="inq">(.*?)</span> # 主旨  # <span class="inq">希望让人自由。</span>

def parse_one_html(html):
    # regex = '<em class="">(\d+)</em>.*?<span class="title">(.*?)</span>.*?<p class="">(.*?)</p>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)</span>.*?<span class>)'
    regex = '<em class="">(\d+)</em>.*?<span class="title">(.*?)</span>.*?<p class="">(.*?)</p>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)</span>.*?<span class="inq">(.*?)</span>'
    pattern = re.compile(regex,re.S)
    items = re.findall(pattern,html)
    for item in items:
        content = ""
        for every_list in item[2].split():
            content=content+"".join(every_list)
        content=re.sub('&nbsp;',' ', content)
        content=re.sub('<br>',' ', content)
        dict = {
            "number":item[0],  # 名次
            "name":item[1],    # 影片名称
            "describe":content,  # 描述
            "star":item[3],      # 评分
            "evaluate":item[4],  # 评分人数
            "title":item[5]      # 主旨
        }
        with open('result_douban_top250.txt', 'a', encoding='utf-8') as f:
            f.write(json.dumps(dict,ensure_ascii=False) + '\n')
    print("车已到达,获取成功...请下车...")




def main(start):
    url = 'https://movie.douban.com/top250'
    if start != 0:
        url = 'https://movie.douban.com/top250?start=' + str(start)+' &filter'
    html = get_one_page(url)
    parse_one_html(html)


if __name__ == '__main__':
	# for i in range(10):
    for i in range(3):
        main( i * 25 )


result

{"number": "1", "name": "肖申克的救赎", "describe": "导演:弗兰克·德拉邦特FrankDarabont   主演:蒂姆·罗宾斯TimRobbins/... 1994 / 美国 / 犯罪剧情", "star": "9.7", "evaluate": "1554769人评价", "title": "希望让人自由。"}
{"number": "2", "name": "霸王别姬", "describe": "导演:陈凯歌KaigeChen   主演:张国荣LeslieCheung/张丰毅FengyiZha... 1993 / 中国大陆香港 / 剧情爱情同性", "star": "9.6", "evaluate": "1149200人评价", "title": "风华绝代。"}
{"number": "3", "name": "这个杀手不太冷", "describe": "导演:吕克·贝松LucBesson   主演:让·雷诺JeanReno/娜塔莉·波特曼... 1994 / 法国 / 剧情动作犯罪", "star": "9.4", "evaluate": "1402460人评价", "title": "怪蜀黍和小萝莉不得不说的故事。"}
{"number": "4", "name": "阿甘正传", "describe": "导演:罗伯特·泽米吉斯RobertZemeckis   主演:汤姆·汉克斯TomHanks/... 1994 / 美国 / 剧情爱情", "star": "9.5", "evaluate": "1211640人评价", "title": "一部美国近现代史。"}
{"number": "5", "name": "美丽人生", "describe": "导演:罗伯托·贝尼尼RobertoBenigni   主演:罗伯托·贝尼尼RobertoBeni... 1997 / 意大利 / 剧情喜剧爱情战争", "star": "9.5", "evaluate": "709505人评价", "title": "最美的谎言。"}
{"number": "6", "name": "泰坦尼克号", "describe": "导演:詹姆斯·卡梅隆JamesCameron   主演:莱昂纳多·迪卡普里奥Leonardo... 1997 / 美国 / 剧情爱情灾难", "star": "9.4", "evaluate": "1153608人评价", "title": "失去的才是永恒的。 "}
{"number": "7", "name": "千与千寻", "describe": "导演:宫崎骏HayaoMiyazaki   主演:柊瑠美RumiHîragi/入野自由Miy... 2001 / 日本 / 剧情动画奇幻", "star": "9.3", "evaluate": "1244793人评价", "title": "最好的宫崎骏,最好的久石让。 "}
{"number": "8", "name": "辛德勒的名单", "describe": "导演:史蒂文·斯皮尔伯格StevenSpielberg   主演:连姆·尼森LiamNeeson... 1993 / 美国 / 剧情历史战争", "star": "9.5", "evaluate": "629276人评价", "title": "拯救一个人,就是拯救整个世界。"}
{"number": "9", "name": "盗梦空间", "describe": "导演:克里斯托弗·诺兰ChristopherNolan   主演:莱昂纳多·迪卡普里奥Le... 2010 / 美国英国 / 剧情科幻悬疑冒险", "star": "9.3", "evaluate": "1199529人评价", "title": "诺兰给了我们一场无法盗取的梦。"}
{"number": "10", "name": "忠犬八公的故事", "describe": "导演:莱塞·霍尔斯道姆LasseHallström   主演:理查·基尔RichardGer... 2009 / 美国英国 / 剧情", "star": "9.3", "evaluate": "803263人评价", "title": "永远都不能忘记你所爱的人。"}
{"number": "11",......
....

task02

任务预览

1.学习beautifulsoup,并使用beautifulsoup提取内容;使用beautifulsoup提取丁香园论坛的回复内容。(丁香园:http://www.dxy.cn/bbs/thread/626626#626626 )
2.学习xpath,使用lxml+xpath提取内容;使用xpath提取丁香园论坛的回复内容。(http://www.dxy.cn/bbs/thread/626626#626626)

** beautifulsoup与xpath简介**
用正则表达式提取页面信息非常繁琐且易出错,而对于网页节点来说,它可以定义id、class或其他属性,且节点间还有层次关系,在网页中可以通过XPath或CSS选择器来定位一个或多个节点。所以在页面解析时,利用XPath或CSS选择器来提取某个节点,然后再调用相应方法获取它的正文内容或者属性,就可以提取到我们需要的信息了。
在python中,要实现上述操作,可使用解析库beautifulsoup、lxml。
 ———————————————— 
版权声明:本文为CSDN博主「Qinchuyan_2019」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42795083/article/details/98883988

code_datawhale02-01_dxybbs_reply_bs4.py

# encoding:utf-8
import requests, json
from bs4 import BeautifulSoup

# 利用reqests抓取网页

def get_html(url):
    HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0';Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}
    response = requests.get(url,headers = HEADERS)
    response.encoding = 'utf-8'
    if response.status_code == 200:
        # print(response.text)
        return response.text
    return

# 一个灵活又方便的HTML解析库,把html 处理成一个文档树的形式,处理高效,支持多种解析器,利用它不使用正则表达式也能抓取网页内容。
"""
<td class="postbody">
                                                                                    
                                                                                            我遇到一个“怪”病人,向大家请教。她,42岁。反复惊吓后晕厥30余年。每次受响声惊吓后发生跌倒,短暂意识丧失。无逆行性遗忘,无抽搐,无口吐白沫,无大小便失禁。多次跌倒致外伤。婴儿时有惊厥史。入院查体无殊。ECG、24小时动态心电图无殊;头颅MRI示小软化灶;脑电图无殊。入院后有数次类似发作。请问该患者该做何诊断,还需做什么检查,治疗方案怎样?
                                                                                        	                                                                            </td>

<td class="postbody">
                                                                                    
                                                                                            从发作的症状上比较符合血管迷走神经性晕厥,直立倾斜试验能协助诊断。在行直立倾斜实验前应该做常规的体格检查、ECG、UCG、holter和X-ray胸片除外器质性心脏病。
<br>
<br>贴一篇“口服氨酰心安和依那普利治疗血管迷走性晕厥的疗效观察”
<br>作者:林文华 任自文 丁燕生
<br>
<br>
<a href="http://www.ccheart.com.cn/ccheart_site/Templates/jieru/200011/1-1.htm" target="_blank" class="ilink" rel="nofollow">http://www.ccheart.com.cn/ccheart_site/Templates/jieru/200011/1-1.htm</a>
                                                                                        	                                                                            </td>
"""


# python 字符串追加实例
# https://www.jb51.net/article/165832.htm
# 爬虫:python之BeautifulSoup(lxml)
# https://blog.csdn.net/zhangzejia/article/details/79658221
# https://blog.csdn.net/hellocsz/article/details/79780654
# lxml简明教程
# https://www.cnblogs.com/ConnorShip/p/9744223.html
# json.dumps()和json.loads()
# python3 中的append()和extend()用法
# https://blog.csdn.net/qq_41936849/article/details/81018566

def get_info(html):
    datas = ""  # 用来存放获取的用户名和评论
    soup = BeautifulSoup(html,'lxml')

    infos = soup.find_all("tbody")
    # print (infos)
    for data in infos:
        try:
            userid = data.find("div", class_="auth").get_text(strip = True)
            # print(userid)
            content = data.find("td",class_ = "postbody").get_text(strip = True)
            # print(content)
            # datas.append((userid,content))
            datas += userid + '\n' + content + '\n'


        except:
            pass
    with open('result_dxybbs_reply_bs4.txt', 'w', encoding='utf-8') as f:
        f.write(str(datas) + '\n')

    print(datas)

    print("您的评论已入库,请小心使用...")
def main():
    url = "http://www.dxy.cn/bbs/thread/626626#626626"
    html = get_html(url)
    infos = get_info(html)





if __name__ == '__main__':
    main()

result

楼医生
我遇到一个“怪”病人,向大家请教。她,42岁。反复惊吓后晕厥30余年。每次受响声惊吓后发生跌倒,短暂意识丧失。无逆行性遗忘,无抽搐,无口吐白沫,无大小便失禁。多次跌倒致外伤。婴儿时有惊厥史。入院查体无殊。ECG、24小时动态心电图无殊;头颅MRI示小软化灶;脑电图无殊。入院后有数次类似发作。请问该患者该做何诊断,还需做什么检查,治疗方案怎样?
lion000
从发作的症状上比较符合血管迷走神经性晕厥,直立倾斜试验能协助诊断。在行直立倾斜实验前应该做常规的体格检查、ECG、UCG、holter和X-ray胸片除外器质性心脏病。贴一篇“口服氨酰心安和依那普利治疗血管迷走性晕厥的疗效观察”作者:林文华 任自文 丁燕生http://www.ccheart.com.cn/ccheart_site/Templates/jieru/200011/1-1.htm
xghrh
同意lion000版主的观点:如果此患者随着年龄的增长,其发作频率逐渐减少且更加支持,不知此患者有无这一特点。入院后的HOLTER及血压监测对此患者只能是一种安慰性的检查,因在这些检查过程中患者发病的机会不是太大,当然不排除正好发作的情况。对此患者应常规作直立倾斜试验,如果没有诱发出,再考虑有无可能是其他原因所致的意识障碍,如室性心动过速等,但这需要电生理尤其是心腔内电生理的检查,毕竟是有一种创伤性方法。因在外地,下面一篇文章可能对您有助,请您自己查找一下。心理应激事件诱发血管迷走性晕厥1例 ,杨峻青、吴沃栋、张瑞云,中国神经精神疾病杂志, 2002 Vol.28 No.2
keys
该例不排除精神因素导致的,因为每次均在受惊吓后出现。当然,在作出此诊断前,应完善相关检查,如头颅MIR(MRA),直立倾斜试验等。


code_datawhale02-01_dxybbs_reply_xpath.py

# encoding:utf-8
import requests
from lxml import etree


# 利用request 请求网页
def get_html(url):
    HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0';Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}
    response = requests.get(url,headers = HEADERS)
    response.encoding = 'utf-8'
    if response.status_code == 200:
        # print(response.text)
        return response.text
    return



"""
1,xpath简介
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
选取节点
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:
表达式	描述
nodename	选取此节点的所有子节点。
/	从根节点选取。
//	从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.	选取当前节点。
..	选取当前节点的父节点。
@	选取属性。
 ———————————————— 
版权声明:本文为CSDN博主「whalefall」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/whalefall/article/details/89141970
https://blog.csdn.net/BBBrian88/article/details/93206163
Python replace(),split(),strip(),join()函数方法
replace()方法语法:
str.replace(old, new[, max])

参数
old – 将被替换的子字符串。
new – 新字符串,用于替换old子字符串。
max – 可选字符串, 替换不超过 max 次

str.split(str="", num=string.count(str)).

参数
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。默认为 -1, 即分隔所有。
返回值
返回分割后的字符串列表。

声明:s为字符串,rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串。不能删除中间的字符或是字符串。
s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符
s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符
s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符
注意:

当rm为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')
描述
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
 ———————————————— 
版权声明:本文为CSDN博主「BBBrian88」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BBBrian88/article/details/93206163

"""
# 通过xpath筛选评论
def get_info(html):
    # datas = ""  # 用来存放获取的用户名和评论
    # soup = BeautifulSoup(html,'lxml')
    # infos = soup.find_all("tbody")
    # print (infos)
    # for data in infos:
    #     try:
    #         userid = data.find("div", class_="auth").get_text(strip = True)
    #         # print(userid)
    #         content = data.find("td",class_ = "postbody").get_text(strip = True)
    #         # print(content)
    #         # datas.append((userid,content))
    #         datas += userid + '\n' + content + '\n'

    tree = etree.HTML(html)
    userid = tree.xpath('//div[@class = "auth"]/a/text()')
    # print(userid)
    contents = tree.xpath('//td[@class="postbody"]')
    # print (contents)

    datas = ""  # 用来存放获取的用户名和评论
    for i in range(0, len(userid)):
        # Xpath string()提取多个子节点中的文本  https://www.cnblogs.com/thunderLL/p/8038927.html
        content =  (contents[i].xpath('string(.)')).strip()   # .strip()不能去除中间的空白符
        # print("1111111")
        # print (content)
        # print("222222")
        datas += (userid[i].strip() + ":" + content.replace('\n','') + '\n')

    with open('result_dxybbs_reply_xpath.txt', 'w', encoding='utf-8') as f:
        f.write(str(datas) + '\n')

    print(datas)

    print("您的评论已入库,请小心使用...")


def main():
    url = "http://www.dxy.cn/bbs/thread/626626#626626"
    html = get_html(url)
    infos = get_info(html)





if __name__ == '__main__':
    main()


result

楼医生:我遇到一个“怪”病人,向大家请教。她,42岁。反复惊吓后晕厥30余年。每次受响声惊吓后发生跌倒,短暂意识丧失。无逆行性遗忘,无抽搐,无口吐白沫,无大小便失禁。多次跌倒致外伤。婴儿时有惊厥史。入院查体无殊。ECG、24小时动态心电图无殊;头颅MRI示小软化灶;脑电图无殊。入院后有数次类似发作。请问该患者该做何诊断,还需做什么检查,治疗方案怎样?
lion000:从发作的症状上比较符合血管迷走神经性晕厥,直立倾斜试验能协助诊断。在行直立倾斜实验前应该做常规的体格检查、ECG、UCG、holter和X-ray胸片除外器质性心脏病。贴一篇“口服氨酰心安和依那普利治疗血管迷走性晕厥的疗效观察”作者:林文华 任自文 丁燕生http://www.ccheart.com.cn/ccheart_site/Templates/jieru/200011/1-1.htm
xghrh:同意lion000版主的观点:如果此患者随着年龄的增长,其发作频率逐渐减少且更加支持,不知此患者有无这一特点。入院后的HOLTER及血压监测对此患者只能是一种安慰性的检查,因在这些检查过程中患者发病的机会不是太大,当然不排除正好发作的情况。对此患者应常规作直立倾斜试验,如果没有诱发出,再考虑有无可能是其他原因所致的意识障碍,如室性心动过速等,但这需要电生理尤其是心腔内电生理的检查,毕竟是有一种创伤性方法。因在外地,下面一篇文章可能对您有助,请您自己查找一下。心理应激事件诱发血管迷走性晕厥1例 ,杨峻青、吴沃栋、张瑞云,中国神经精神疾病杂志, 2002 Vol.28 No.2
keys:该例不排除精神因素导致的,因为每次均在受惊吓后出现。当然,在作出此诊断前,应完善相关检查,如头颅MIR(MRA),直立倾斜试验等。


task03

任务预览

1.安装selenium并学习,使用selenium模拟登陆163邮箱。(163邮箱:https://mail.163.com)
2.学习IP相关知识:
1)学习什么是IP,为什么会出现IP被封,如何应对IP被封的问题。
2) 抓取西刺代理,并构建自己的代理池。(西刺:https://blog.csdn.net/weixin_43720396/article/details/88218204)

参考资料:https://blog.csdn.net/weixin_42937385/article/details/88150379
https://blog.csdn.net/weixin_43720396/article/details/88218204
 ———————————————— 
版权声明:本文为CSDN博主「Qinchuyan_2019」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42795083/article/details/99109381

code_datawhle03-01_163mail_login.py


# 试用selenium
# from selenium import webdriver

# browser = webdriver.Chrome()
# browser.get("http://www.baidu.com")
"""
sleep(): 强制等待,设置固定休眠时间
implicitly_wait():隐石等待,也叫智能等待,是 webdirver 提供的一个超时等待。
                    隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
WebDriverWait():显示等待,同样也是 webdirver 提供的方法。
在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,
如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
https://www.cnblogs.com/VseYoung/p/selenium_wait_3_python.html
Task5 安装selenium并学习,登录163.邮箱
https://blog.csdn.net/u011757108/article/details/88168215
Datawhale|第八期 爬虫3
https://blog.csdn.net/weixin_42795083/article/details/99109381

https://blog.csdn.net/wujialaoer/article/details/85172351
selenium自动化登录网易163邮箱全部代码(网易的邮箱好像都能用)

https://blog.csdn.net/tao15716645708/article/details/86701019
selenium模拟登陆淘宝,获取cookies

https://www.cnblogs.com/hellosecretgarden/p/9206648.html
自动化测试 selenium 模块 webdriver使用(一)

https://blog.csdn.net/huilan_same/article/details/52200586
selenium之 定位以及切换frame(iframe)

https://blog.csdn.net/sinat_29177717/article/details/83048127
Python+Selenium自动化测试笔记:登录163邮箱



"""
import random
import time

from selenium import webdriver


def automatic_login(name, pwd, url):
    browser = webdriver.Chrome()
    # url = 'http://mail.163.com/'
    browser.get(url)
    time.sleep(5)
    browser.maximize_window()  # 打开网页窗口

    # time.sleep(10)
    browser.implicitly_wait(3)  # 隐式等待
    # 切换为窗口登录
    browser.find_element_by_id('lbNormal').click()

    time.sleep(random.random())  # 随机休眠0-1秒

    # iframe = browser.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
    # 找到邮箱账号登录框对应的iframe的id是动态的,所以不能用id寻找,有没有name,所以用索引0

    browser.switch_to.frame(0)

    # 找到邮箱账号输入框
    time.sleep(3)
    email = browser.find_element_by_name("email")
    email.clear()

    # 将自己的邮箱地址输入到邮箱账号框中
    # email.send_keys('1***1')
    email.send_keys(name)

    print("5" * 10)
    time.sleep(3)
    # 找到密码输入框
    password = browser.find_element_by_name("password")
    password.clear()
    # 输入自己邮箱密码
    # password.send_keys('3***5')
    password.send_keys(pwd)
    # 找到登录按钮
    login_em = browser.find_element_by_id('dologin')
    # 点击登录按钮
    login_em.click()

    time.sleep(9)
    browser.quit()


def main():
    name = str(input("请输入账号:"))
    pwd = str(input("请输入密码:"))
    url = 'http://mail.163.com/'
    automatic_login(name, pwd, url)


if __name__ == "__main__":
    main()

result

登录成功
163

code_datawhle03-02_163mail_login_xici.py

import requests
from lxml import etree
import time
# 424.13342022895813


"""
https://blog.csdn.net/weixin_38920937/article/details/81914142
爬取西刺代理检测代理是否可用并记录时间
https://blog.csdn.net/q1694222672/article/details/82716753
代理池篇(一)获取66免费代理网+西刺代理
解决被西刺代理封ip的问题
https://blog.csdn.net/blackeagleoht/article/details/89670702
"""

def get_all_proxy(n):
    url = 'http://www.xicidaili.com/nn/' + str(n)

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

    # with open('song.html', 'wb') as f:
    #     f.write(response.content)

    html_ele = etree.HTML(response.text)

    ip_eles = html_ele.xpath('//table[@id="ip_list"]/tr/td[2]/text()')
    port_ele = html_ele.xpath('//table[@id="ip_list"]/tr/td[3]/text()')

    # print(len(ip_eles))
    # print(len(port_ele))
    proxy_list = []
    for i in range(0,len(ip_eles)):
        proxy_str = 'http://' + ip_eles[i] + ':' + port_ele[i]
        proxy_list.append(proxy_str)

    return proxy_list

def check_all_proxy(proxy_list):
    valid_proxy_list = []
    for proxy in proxy_list:
        url = 'http://www.baidu.com/s?wd=ip'
        proxy_dict = {
            'http': proxy
        }
        try:
            response = requests.get(url, proxies=proxy_dict, timeout=5)
            if response.status_code == 200:
                print('代理可用:' + proxy)
                valid_proxy_list.append(proxy)
                with open('result_proxy_xici.txt', 'a', encoding='utf-8') as f:
                    f.write( str(proxy) + '\n')
            else:
                print('代理超时')
        except:
            pass
            #print('代理不可用--------------->')
    return valid_proxy_list


if __name__ == '__main__':

    start_time = time.time()
    print(',前方请注意,开始爬了___--'* 3)
    for i in range(3):
        proxy_list = get_all_proxy(i)
        valid_proxy_list = check_all_proxy(proxy_list)
        time.sleep(3)
    end_time = time.time()
    print('--'*30)
    print(valid_proxy_list)
    print('耗时:' + str(end_time-start_time))

result

http://112.85.171.67:9999
http://163.204.240.181:9999
http://112.87.69.106:9999
http://123.163.96.169:9999
http://139.227.162.32:8118
http://60.13.42.147:9999
http://58.253.154.113:9999
http://42.159.91.248:8080
http://60.13.42.9:9999
http://182.35.81.5:9999
http://112.87.69.176:9999
http://60.13.42.55:9999
http://163.204.240.101:9999

task4

任务预览

模拟登录丁香园,并抓取论坛页面所有的人员基本信息与回复帖子内容。
(丁香园:http://www.dxy.cn/bbs/thread/626626#626626 )

code_datawhale04_dxybbs_reply_login.py

# encoding:utf-8
"""
任务预览
模拟登录丁香园,并抓取论坛页面所有的人员基本信息与回复帖子内容。(丁香园:http://www.dxy.cn/bbs/thread/626626#626626 )
https://blog.csdn.net/weixin_42795083/article/details/99320276
"""
import time
from lxml import etree

from selenium import webdriver


class getUrl(object):
    """docstring for getUrl"""
    def __init__(self):
        self.headers = {
                        "Connection": "keep-alive",
                        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "  
                        "(KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36",
                        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
                        "Accept-Encoding": "gzip, deflate, sdch",
                        "Accept-Language": "zh-CN,zh;q=0.8"
                        };


    def run(self,name,pwd,url):
        print("俺来了.....")
        browser = webdriver.Chrome()
        login_url = 'https://auth.dxy.cn/accounts/login?service=http://www.dxy.cn/bbs/index.html'
        browser.get(login_url)
        time.sleep(1)
        browser.maximize_window()  # 打开网页窗口
        # 切换账号密码登录表单
        js1 = 'document.querySelector("#j_loginTab1").style.display="none";'
        browser.execute_script(js1)
        time.sleep(1)
        js2 = 'document.querySelector("#j_loginTab2").style.display="block";'
        browser.execute_script(js2)
        time.sleep(3)
        #输入账号密码
        input_name = browser.find_element_by_name('username')
        input_name.clear()
        input_name.send_keys(name)
        input_pass = browser.find_element_by_name('password')
        input_pass.clear()
        input_pass.send_keys(pwd)

        # 点击登录
        # print("1"* 10)
        browser.find_element_by_xpath('//*[@class="form__button"]/button').click()
        # print("2" * 10)
        # 此步骤有滑动验证码,先跳过
        time.sleep(19)
        cookie = browser.get_cookies()
        cookie_dict = {i['name']:i['value'] for i in cookie}

        # 转到抓取的页面

        # url = "http://www.dxy.cn/bbs/thread/626626#626626"
        browser.get(url);

        html = browser.page_source
        tree = etree.HTML(html)
        user = tree.xpath('//div[@id="postcontainer"]//div[@class = "auth"]/a/text()')
        print("3" * 10)
        # print(user)
        contents = tree.xpath('//td[@class = "postbody"]')
        result = ""
        for i in range(0, len(user)):
            content =  contents[i].xpath('string(.)').strip()
            result += user[i].strip() + ":" + content.replace('\n','')+ "\n"

            print(user[i].strip())

            # 写入文件
        with open("result_dxybbs_reply_login.txt", 'w', encoding='utf-8') as f:
            f.write(str(result +"\n"))

        time.sleep(9)
        browser.quit()
        print('到此一游')

if __name__ == '__main__':
    geturl = getUrl()
    name = str(input("请输入账号:"))
    pwd = str(input("请输入密码:"))
    url = "http://www.dxy.cn/bbs/thread/626626#626626"
    geturl.run(name,pwd,url)

result

楼医生:我遇到一个“怪”病人,向大家请教。她,42岁。反复惊吓后晕厥30余年。每次受响声惊吓后发生跌倒,短暂意识丧失。无逆行性遗忘,无抽搐,无口吐白沫,无大小便失禁。多次跌倒致外伤。婴儿时有惊厥史。入院查体无殊。ECG、24小时动态心电图无殊;头颅MRI示小软化灶;脑电图无殊。入院后有数次类似发作。请问该患者该做何诊断,还需做什么检查,治疗方案怎样?
lion000:从发作的症状上比较符合血管迷走神经性晕厥,直立倾斜试验能协助诊断。在行直立倾斜实验前应该做常规的体格检查、ECG、UCG、holter和X-ray胸片除外器质性心脏病。贴一篇“口服氨酰心安和依那普利治疗血管迷走性晕厥的疗效观察”作者:林文华 任自文 丁燕生http://www.ccheart.com.cn/ccheart_site/Templates/jieru/200011/1-1.htm
xghrh:同意lion000版主的观点:如果此患者随着年龄的增长,其发作频率逐渐减少且更加支持,不知此患者有无这一特点。入院后的HOLTER及血压监测对此患者只能是一种安慰性的检查,因在这些检查过程中患者发病的机会不是太大,当然不排除正好发作的情况。对此患者应常规作直立倾斜试验,如果没有诱发出,再考虑有无可能是其他原因所致的意识障碍,如室性心动过速等,但这需要电生理尤其是心腔内电生理的检查,毕竟是有一种创伤性方法。因在外地,下面一篇文章可能对您有助,请您自己查找一下。心理应激事件诱发血管迷走性晕厥1例 ,杨峻青、吴沃栋、张瑞云,中国神经精神疾病杂志, 2002 Vol.28 No.2
keys:该例不排除精神因素导致的,因为每次均在受惊吓后出现。当然,在作出此诊断前,应完善相关检查,如头颅MIR(MRA),直立倾斜试验等。
楼医生:谢谢上面几位的热心。这个病人从学会走路就出现症状,并且近几年发作越来越频繁,一个月有4、5次。如果说是血管迷走性晕厥,它的机理是什么?在这个病人身上如何解释?
shilly:不会是心因性癫痫吧?我不是专科,猜猜
jrhs:倾斜试验一定先排除器质性心脏病。
yangwein:1,头颅MRI示小软化灶;脑电图无殊,惊吓后晕厥30余年,婴儿时有惊厥史。先做动态脑电图排查癫痫,还有视觉诱发试验等,请神经内科会诊。2,排除神经内科问题后,行直立倾斜实验筛查血管迷走神经性晕厥。彩超排除器质性心脏病。
duzl:楼医生   如果说是血管迷走性晕厥,它的机理是什么?   体位改变-血液下移-Bp、HR下降-晕厥
楼医生:该患者直立倾斜试验阴性。UCG无殊。实在是个棘手的病人。下步诊断、治疗方案如何,请各位同仁指点。谢谢!
jrhs:动态脑电图就能排除癫痫吗?我看不能,发作时有脑电图吗?
shanshoujie:晕厥分类:心源性,非心源性,原因不明等三类,心源性包括心脏排血受阻,心律失常两类,非心源性包括血管神经运动失调性,脑血管疾病性,神经系统,代谢内分泌性等,所以常规检查包括心电图,超声心动图,CT,脑电图,24小时动态心电图,运动平板,心脏电生理等,但靠24小时动态心电图正常不能排除心律失常所致,必要时需要心电记录器延长监测,对于血管神经运动失调性及不明原因所致,建议行直立倾斜试验。
eabee:问:这个病人智力有问题吗? 说她有30多年的发病史,多次发作时有外伤,问最严重的外伤情况如何?有无癔病的可能???说她婴儿时有惊厥史,说明她脑损伤病变的可能性存在,可能脑病变本身存在,也可能是惊厥后导致脑损伤。1)试用抗癫痫药物治疗,可以考虑用比较缓和的药物尝试。2)检测脑血管情况,实验用钙拮抗剂,或其他扩血管药物。
xghrh:希望下面的流程图对您的下步诊治有帮助。
楼医生:问:这个病人智力有问题吗? 说她有30多年的发病史,多次发作时有外伤,问最严重的外伤情况如何?有无癔病的可能???说她婴儿时有惊厥史,说明她脑损伤病变的可能性存在,可能脑病变本身存在,也可能是惊厥后导致脑损伤。1)试用抗癫痫药物治疗,可以考虑用比较缓和的药物尝试。2)检测脑血管情况,实验用钙拮抗剂,或其他扩血管药物。 该患者智力正常,已结婚生子。最严重的外伤是跌倒致脑出血,还有数次骨折、颜面部外伤,门牙跌落数枚。基本排除癔病可能。
雨叶:我认为这个病人可能是癫痫,应该发作时做脑电图
mmdra:Hehe! LQTs!!!
daeik:晕厥之前是否有出汗、恶心、脸色苍白等症状?晕厥持续时间?除考虑血管迷走性晕厥之外,癔病也不能除外。
小贤:每次晕厥后意识马上恢复,神志清楚,则考虑心血管原性可能大晕厥后意识恢复慢,有嗜睡,则中枢性可能大此患者意识恢复是否很快
RonnieWhite:LQT
shunwee:从病史看及发作情形看恶性心律失常所致晕厥可能性不大,鄙人认为不典型癫痫可能性较大,但也应排除迷走性晕厥,直立倾斜可以做但阳性并不能排除癫痫。可考虑用卡马西平试验性治疗。
Edmond:楼医生   该患者直立倾斜试验阴性。UCG无殊。实在是个棘手的病人。下步诊断、治疗方案如何,请各位同仁指点。谢谢!   楼医生,估计是查不出什么问题的,因为已经都快30多年的病史了,该有的疾病应该现出原形了,而现在却恰恰没法子找到它。既然都检查过了,也没发现有价值得的东西,而且每次发作多因惊吓引起,你看,是否就试一试“惊吓”的方法来诱发它呢?诱发的时候可以心电监护、血压监护、脑电图监测等等,相信肯定有所发现的。这也是不是办法的办法,您说呢?
紫薇1219:我认为癫痫的可能性最大,但的确应该先排除心源性的,可以进一步查一下。
lingguang:同志们呀,我认为是不是考虑一下先天性长QT综合征?这种病人可是会因为受惊吓导致晕厥甚至致死的呀!
lingguang:应当是一种肾上腺依赖性的,在受惊吓时肾上腺素大幅度升高,出现恶性心律失常而致晕厥。我不知道当时HOLTER检查时有没有发作?当时若有发作时的心电图最有说服力。我认为应当排除这方面的情况。必要的时候作惊吓试验,当然现场要有心电监护以及抢救措施。
呆子:考虑为癫痫,建议动态脑电图,若阴性。则试用抗癫痫药
lingguang:应当做惊吓试验,脑电图与心电图同时监测。我想肯定会有结果的。无非是两种情况:脑源性与心源性。


扩展

https://blog.csdn.net/u012914436/article/details/100031810
携程滑动与点选文字验证码破解

END

谢谢阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值