主要运用到的python知识#网页请求#正则表达式#Json格式保存文件
直接上代码吧!
# -*- coding:utf-8 -*-
import requests
import re
import json
import time
def get_one_page(url):
'''
该函数接收一个 url 作为参数,返回指定 url 页面的源代码。
:param url:页面的链接
'''
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
response = requests.get(url,headers = headers,timeout = 5)
# 判断响应体的状态码,若是200则表示响应成功,返回页面源代码,否则返回 None
if response.status_code == 200:
response.encoding = 'utf-8'
return response.text
return None
def parse_one_page(html):
'''
解析的内容有:商品信息,商品id,货源,商品路径
'''
# 使用 compile 方法将正则字符串编译成正则表达式对象,以便在后面的匹配中复用
pattern = re.compile('<li data-sku="(.*?)" class="gl-item">.*?<div class="gl-i-wrap">.*?<div class="p-img">.*?<a target="_blank" title="(.*?)" href="(.*?)".*?<div class="p-stock">(.*?)</div>', re.S)
items = re.findall(pattern, html)
for item in items:
yield {
'name': item[1],
'id': item[0],
'goods':item[3],
'url': item[2]
}
def write_to_file(content):
'''
该函数用于将商品信息写入到文本文件
'''
with open('result.txt', 'a', encoding='utf-8') as f:
# 通过 JSON 库的 dumps()方法实现字典的序列化,
# 并指定 ensure_ascii 参数为 Fasle,这样可以保证输出的结果是中文形式而不是 Unicode 编码
f.write(json.dumps(content, ensure_ascii=False) + '\n')
def main():
#这里主要在京东首页搜索了关键次“n95口罩京东自营”,换做其它也是适用的,只要整体网页结构不变
url = 'https://search.jd.com/Search?keyword=n95%E5%8F%A3%E7%BD%A9%E4%BA%AC%E4%B8%9C%E8%87%AA%E8%90%A5&enc=utf-8&wq=n95%E5%8F%A3%E7%BD%A9%E4%BA%AC%E4%B8%9C%E8%87%AA%E8%90%A5&pvid=1a75432e25154ae9a143116fc9a41254'
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__ == "__main__":
main()
结果: