简单的网页爬虫开发

1. requests安装

使用pip安装requests,代码如下:

pip install requests

1. 使用requests获取网页源代码

网页有很多种打开方式,最常见的是GET方式和POST方式。

1.1 GET方式

通过网页 http://exercise.kingname.info/exercise_requests_get.html
可以测试使用requests的get()方法获取网页
image

import requests
html = requests.get('http://exercise.kingname.info/exercise_requests_get.html').content.decode()
print(html)

image

1.2 结合requests与正则表达式

1.提取标题

title = re.search('title>(.*?)<',html,re.S).group(1)

2.提取正文,并将两段正文使用换行符拼接起来。

content_list = re.findall('p>(.*?)<',html,re.S)
content_str = '\n'.join(content_list)
import requests
import re

html = requests.get('http://exercise.kingname.info/exercise_requests_get.html').content.decode()
# 提取标题
title = re.search('title>(.*?)<',html,re.S).group(1)
# 提取正文
content_list = re.findall('<p>(.*?)<',html,re.S)
# 使用\n换行符将两段正文拼接起来
content_str = '\n'.join(content_list)
print(f'页面标题为:{title}')
print(f'页面正文内容为:\n{content_str}')

image

1.3 POST方式

通过浏览器直接访问网页会得到错误信息,故可以通过post方式在网页:https://exercise.kingname.info/exercise_requests_post
可以测试使用requests的post()方法获取网页
image

import requests
data = {
    'name':'admin',
    'password':'123456'
}
html_formdata = requests.post('https://exercise.kingname.info/exercise_requests_post',data=data).content.decode()
print(html_formdata)

image

1.4 多线程爬虫测试

循环访问百度首页100次

单线程爬虫

def query(url):
    requests.get(url)

start = time.time()
for i in range(100):
    query('https://www.baidu.com')
end = time.time()
print(f'单线程循环访问100次百度首页,耗时:{end - start}')

多线程爬虫

start = time.time()
url_list =  []
for i in range(100):
    url_list.append('https://www.baidu.com')
pool = Pool(5)
pool.map(query,url_list)
end = time.time()
print(f'五线程循环访问100次百度首页,耗时:{end - start}')
import requests
import time
from multiprocessing.dummy import Pool
def query(url):
    requests.get(url)

start = time.time()
for i in range(100):
    query('https://www.baidu.com')
end = time.time()
print(f'单线程循环访问100次百度首页,耗时:{end - start}')

start = time.time()
url_list =  []
for i in range(100):
    url_list.append('https://www.baidu.com')
pool = Pool(5)
pool.map(query,url_list)
end = time.time()
print(f'五线程循环访问100次百度首页,耗时:{end - start}')

image

posted @ 2025-06-21 20:44  影武浮云  阅读(29)  评论(0)    收藏  举报