第三方库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>
######
例子二:
从例子一获取的数据中筛选出版块[功能]下第一个选项的名称:
网页上的格式:(用户未登录时)
笺注:
网页代码中,版块[功能]下第一个选项的名称格式,如下:(用户未登录时)
</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
使用火狐浏览器,按F12,再进行用户登录,
网络》POST》参数》表单数据:
脚本内容:
#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>
######
例子五:
从例子四获取的数据中筛选出版块[功能]下第一个、第二个选项的名称:
网页上的格式:(用户已经登录时)
笺注:
网页代码中,版块[功能]下第一个、第二个选项的名称格式,如下:(用户已经登录时)
</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) |