返回列表 发帖

网络爬虫_爬(word.zhuohua.store)

第三方库requests的安装可参考:网络爬虫_爬(电影天堂)

第三方库requests的版本:(会自动安装一些依赖软件包)
C:\Users\jacky>pip3 freeze
certifi==2022.5.18.1
charset-normalizer==2.0.12
idna==3.3
requests==2.27.1
urllib3==1.26.9

C:\Users\jacky>





######

例子一:
保存通过URL(http://word.zhuohua.store/)获取到的网页源代码和内容:

脚本内容:
#coding=utf-8
import requests

url = 'http://word.zhuohua.store/' #网站 (word.zhuohua.store)的URL

response = requests.get(url=url)
response.encoding = 'utf-8' #有些网站使用utf-8,有些网站使用gbk
Key_1 = response.text

Path_1 = "./1.txt"

f_name = open(Path_1,'w',encoding='utf-8') #写入(覆盖)文件内容
Result_1 = f_name.write(Key_1)

f_name.close()


运行脚本的结果:(脚本所在目录下会生成文件1.txt,文件里会包含网页源代码和内容)
C:\Users\jacky\Desktop>python xx.py

C:\Users\jacky\Desktop>





######

例子二:
从例子一获取的数据中筛选出版块[功能]下第一个选项的名称:

网页上的格式:(用户未登录时)
图片1.png
2022-6-11 22:44


笺注:
网页代码中,版块[功能]下第一个选项的名称格式,如下:(用户未登录时)
</section><section id="meta-2" class="widget widget_meta"><h2 class="widget-title">功能</h2>                        <ul>
                                                <li><a href="http://word.zhuohua.store/wp-login.php">登录</a></li>


脚本内容:
#coding=utf-8
import re

def func1(): #从文件1.txt中读取数据
        Path_1 = "./1.txt"
        f_name = open(Path_1,'r',encoding='utf-8')

        fields_1 = f_name.read() #输出文件全部内容
        f_name.close()
       
        func2(fields_1)
   
def func2(fields_1):
        Result_1 = re.compile(u'.*?功能.*?php">(.*?)</a></li>.*?',re.S) # re.S 包括换行符\n在内的任意字符;换行符\n可以不写

        Result_2 = Result_1.findall(fields_1)
        print("版块[功能]下第一个选项的名称:",Result_2[0])

if __name__ == '__main__':

        func1()       


脚本运行的结果:(用户未登录时)
C:\Users\jacky\Desktop>python xx.py
版块[功能]下第一个选项的名称: 登录

C:\Users\jacky\Desktop>





######

例子三:
从例子一获取的数据中筛选出版块[近期文章]下的所有文章名称:

笺注:
版块[近期文章]下的文章名称格式,如下:
</section>                <section id="recent-posts-2" class="widget widget_recent_entries">                <h2 class="widget-title">近期文章</h2>                <ul>
                                        <li>
                                <a href="http://word.zhuohua.store/?p=14">网络爬虫_爬(豆瓣电影)</a>
                                                </li>
                                        <li>
                                <a href="http://word.zhuohua.store/?p=4">网络爬虫_爬(电影天堂)</a>
                                                </li>
                                        <li>
                                <a href="http://word.zhuohua.store/?p=1">网络爬虫_爬(blog.zhuohua.store)</a>
                                                </li>
                                </ul>
                </section>


脚本内容:
#coding=utf-8
import re

def func1(): #从文件1.txt中读取数据   
        Path_1 = "./1.txt"
        f_name = open(Path_1,'r',encoding='utf-8')

        fields_1 = f_name.read() #输出文件全部内容
        f_name.close()
       
        func2(fields_1)
       
   
def func2(fields_1): #从func1()获得的数据中进行筛选出“近期文章”那一片的内容
        Result_1 = re.compile(u'.*?近期文章(.*?)</section>.*?',re.S)
        Result_2 = Result_1.findall(fields_1)
        Result_3 = Result_2[0]
        func3(Result_3)
       
       
def func3(Result_3):
        Path_1 = "./2.txt"

        f_name = open(Path_1,'w',encoding='utf-8') #写入(覆盖)文件内容
        Result_1 = f_name.write(Result_3)

        f_name.close()
       
        func4()
       
       
def func4(): #从文件2.txt中读取数据
        Path_1 = "./2.txt"
        f_name = open(Path_1,'r',encoding='utf-8')

        fields_1 = f_name.readlines() #输出结果为列表,包含换行符
        f_name.close()
       
        func5(fields_1)
       
       
def func5(fields_1): #从func4()获得的数据中进行筛选
        print('版块[近期文章]下的所有文章名称:')
       
        K_1 = '<a href=' #关键字

        for Key_1 in fields_1:
                if K_1 in Key_1:
                       
                        Result_1 = re.compile(u'<a href.*?>(.*?)</a>.*?')
                        Result_2 = Result_1.findall(Key_1)
                        print(Result_2[0])
                       

if __name__ == '__main__':

        func1()       


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
版块[近期文章]下的所有文章名称:
网络爬虫_爬(豆瓣电影)
网络爬虫_爬(电影天堂)
网络爬虫_爬(blog.zhuohua.store)


C:\Users\jacky\Desktop>





######

例子四:
模拟用户登录,
原理:先在登录页面完成登录,再访问指定的网页。

网站 (word.zhuohua.store)的用户登录页面的URL:
http://word.zhuohua.store/wp-login.php
图片2.png
2022-6-11 22:53



使用火狐浏览器,按F12,再进行用户登录,
网络》POST》参数》表单数据:
图片3.png
2022-6-11 22:53


图片4.png
2022-6-11 22:54



脚本内容:
#coding=utf-8
import requests

url_1 = 'http://word.zhuohua.store/wp-login.php?loggedout=true' #用户登录页面的URL

frmo_data={ #表单数据;要加英文单引号、逗号
        'log': 'jacky',
        'pwd': 'Yuplw*JpXXX',
        'rememberme': 'forever',
        'wp-submit': '登录',
        'redirect_to': 'http://word.zhuohua.store/wp-admin/',
        'testcookie': '1',
}

session=requests.Session()

header={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:67.0) Gecko/20100101 Firefox/67.0'
}
Result_1 = session.post(url=url_1,headers=header,data=frmo_data)
       
       
url_2 = 'http://word.zhuohua.store/' #实际要访问的页面的URL
Result_2 = session.get(url=url_2,headers=header).text

       
Path_1 = "./3.txt"

f_name = open(Path_1,'w',encoding='utf-8') #写入(覆盖)文件内容
Result_3 = f_name.write(Result_2)

f_name.close()


运行脚本的结果:(脚本所在目录下会生成文件3.txt,文件里会包含实际要访问的页面的网页源代码和内容)
C:\Users\jacky\Desktop>python xx.py

C:\Users\jacky\Desktop>





######

例子五:
从例子四获取的数据中筛选出版块[功能]下第一个、第二个选项的名称:

网页上的格式:(用户已经登录时)
图片5.png
2022-6-11 22:55


笺注:
网页代码中,版块[功能]下第一个、第二个选项的名称格式,如下:(用户已经登录时)
</section><section id="meta-2" class="widget widget_meta"><h2 class="widget-title">功能</h2>                        <ul>
                        <li><a href="http://word.zhuohua.store/wp-admin/">管理站点</a></li>                        <li><a href="http://word.zhuohua.store/wp-login.php?action=logout&_wpnonce=f6e6adad43">注销</a></li>


脚本内容:
#coding=utf-8
import re

def func1(): #从文件3.txt中读取数据
        Path_1 = "./3.txt"
        f_name = open(Path_1,'r',encoding='utf-8')

        fields_1 = f_name.read() #输出文件全部内容
        f_name.close()
       
        func2(fields_1)
        func3(fields_1)
   
def func2(fields_1):
        Result_1 = re.compile(u'.*?功能.*?wp-admin/">(.*?)</a></li>.*?',re.S)
        Result_2 = Result_1.findall(fields_1)
        print("版块[功能]下第一个选项的名称:",Result_2[0])
       
def func3(fields_1):
        Result_1 = re.compile(u'.*?功能.*?_WPnonce=.*?">(.*?)</a>.*?',re.S|re.I) # re.I 忽略英文字母的大小写
        Result_2 = Result_1.findall(fields_1)
        print("版块[功能]下第二个选项的名称:",Result_2[0])
       

if __name__ == '__main__':

        func1()       


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
版块[功能]下第一个选项的名称: 管理站点
版块[功能]下第二个选项的名称: 注销

C:\Users\jacky\Desktop>





######

例子六:
模拟用户登录,
从URL(http://word.zhuohua.store/?p=1)中获取文章名称、已登录的用户名:

笺注:
该文章的名称格式,如下:
<h1 class="entry-title">网络爬虫_爬(blog.zhuohua.store)</h1>        </header><!-- .entry-header -->

该文章里已登录的用户名的格式,如下:
<p class="logged-in-as"><a href="http://word.zhuohua.store/wp-admin/profile.php" aria-label="已登录为jacky。编辑您的个人资料。">已登录为jacky</a>。


脚本内容:
#coding=utf-8
import requests
import re

def func1():
        url_1 = 'http://word.zhuohua.store/wp-login.php?loggedout=true' #用户登录页面的URL

        frmo_data={ #表单数据;要加英文单引号、逗号
                'log': 'jacky',
                'pwd': 'YuplwXXX',
                'rememberme': 'forever',
                'wp-submit': '登录',
                'redirect_to': 'http://word.zhuohua.store/wp-admin/',
                'testcookie': '1',
        }

        session=requests.Session()

        header={
                'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:67.0) Gecko/20100101 Firefox/67.0'
        }
        Result_1 = session.post(url=url_1,headers=header,data=frmo_data)
       
        url_2 = 'http://word.zhuohua.store/?p=1' #实际要访问的页面的URL
        Result_2 = session.get(url=url_2,headers=header).text
       
        Path_1 = "./8.txt"

        f_name = open(Path_1,'w',encoding='utf-8') #写入(覆盖)文件内容
        Result_3 = f_name.write(Result_2)

        f_name.close()
       
        func2()
       
       
def func2(): #从文件中读取数据   
        Path_1 = "./8.txt"
        f_name = open(Path_1,'r',encoding='utf-8')

        fields_1 = f_name.read() #输出文件全部内容
        f_name.close()
       
        func3(fields_1)
        func4(fields_1)
   
def func3(fields_1):
        Result_1 = re.compile(u'.*?<h1 class="entry-title">(.*?)</h1>.*?')
        Result_2 = Result_1.findall(fields_1)
        print("文章名称:",Result_2[0])
       
def func4(fields_1):
        Result_1 = re.compile(u'.*?已登录为(.*?)。.*?')
        Result_2 = Result_1.findall(fields_1)
        print("已登录的用户名:",Result_2[0])
       
       
if __name__ == '__main__':

        func1()       


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
文章名称: 网络爬虫_爬(blog.zhuohua.store)
已登录的用户名: jacky

C:\Users\jacky\Desktop>





相关文章:
正则表达式
网络爬虫_爬(blog.zhuohua.store)

返回列表